Javascript 下拉列表是如何更新的?
这是一个更复杂的问题,我试图将js事件处理程序结合在一起。在阅读了我早期的帖子后,我意识到我不确定我网站上的一个行为是如何运作的,所以我想把它作为一个新的主题发布 基本上,我正在使用一个商业wordpress插件,它使用大量非常复杂的JS/AJAX代码根据用户的选择来更新一些下拉菜单例如,如果您在下拉菜单#1中选择“选项1”,下拉菜单#2将更新为“a、b和c”,如果您在下拉菜单#1中选择“选项2”,下拉菜单#2将显示“x、y和z” 问题在于,我不知道插件如何检测下拉菜单#1中的更改以更新下拉菜单#2中的选项。通常,有一种onClick事件来处理这些类型的事件,但是在搜索代码之后,我找不到任何东西Javascript 下拉列表是如何更新的?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,这是一个更复杂的问题,我试图将js事件处理程序结合在一起。在阅读了我早期的帖子后,我意识到我不确定我网站上的一个行为是如何运作的,所以我想把它作为一个新的主题发布 基本上,我正在使用一个商业wordpress插件,它使用大量非常复杂的JS/AJAX代码根据用户的选择来更新一些下拉菜单例如,如果您在下拉菜单#1中选择“选项1”,下拉菜单#2将更新为“a、b和c”,如果您在下拉菜单#1中选择“选项2”,下拉菜单#2将显示“x、y和z” 问题在于,我不知道插件如何检测下拉菜单#1中的更改以更新下拉菜单
我认为,与其在这里发布完整的代码,不如让您更容易地找到,这样您就可以自己寻找了。如果有人能告诉我如何检测下拉菜单的变化,以及什么功能在处理更新,我将不胜感激 在解释示例内容后编辑:我查看了目录/购物车的行为。所有的代码都很小,很难阅读,但看起来它们使用的是更改函数。不管他们是不是,如果我是你,我会用零钱。您在使用的代码中所做的操作看起来是正确的。通过使用下拉元素的通用事件“onchange”来检测更改 onchange可以内联绑定,例如:
<select onchange="HandleChange(this);">
或者使用客户端脚本,它可以与attachEvent等命令绑定
或者addEventListener,取决于浏览器,我很确定这是正确的
jQuery在幕后使用的内容
问题是:你为什么问这个?你的目标是什么?我认为你想要的代码被缩小了,这使得阅读变得非常困难,但是这一位
f(k)。更改或f(I)。在“ProductoptionsMenu”函数中更改可能就是正在进行工作的那一位(f是jqnc(),我怀疑这是jQueryNonConflict函数)k和i是什么部分取决于哪些变量作为l、g、o和p传递
关于您的评论,我尝试了以下脚本:
抱歉,我只能运行此脚本:
$('#options-1 option').each(function(){
$(this).parent().after('<input type="radio" name="options-1radio" value="'+$(this).val()+'" /> - '+$(this).text()+'<br />');
});
$('#options-1').after('<br />');
$('input[name=options-1radio]').click(function(){
radioVal = $('input[name=options-1radio]:checked').val();
$('#options-1').val(radioVal);
$('#options-1').change();
});
//$('#options-1').hide();
$(“#选项-1选项”)。每个(函数(){
$(this.parent().after('-'+$(this.text()+'
');
});
$(“#options-1”)。在(“
”之后;
$('input[name=options-1radio]')。单击(函数(){
radioVal=$('input[name=options-1radio]:checked').val();
$(#options-1').val(radioVal);
$('#选项-1')。更改();
});
//$(“#选项-1”).hide();
但遗憾的是,我遇到了与您相同的问题,即它没有触发激活价格查询的开关。我得到了一个“太多递归”错误,但是在没有运行上面的代码的情况下似乎会触发。我不知道这是您添加的代码还是原始源代码
祝你在解决这个问题上取得最好的成绩。如果我有什么想法,我会发布。在页面底部有一个带有.change标记的jquery函数,它只是通过该函数更新值。它将一些值传递到那里,并将其附加到较低的值上
$(function(){
$("#options-1 option").each(function(i, e) {
$("<input type='radio' name='r' />")
.attr("value", $(this).val())
.attr("checked", i == 0)
.click(function () {
$("#options-1").val($(this).val());
})
.appendTo("#r");
$("#options-1").change(function(){
$("input[name='r'][value='"+this.value+"']").attr("checked","checked");
});
});
});
$("#options-1").change(function(){
$("input[name='r'][value='"+this.value+"']").attr("checked","checked");
});
$(函数(){
$(“#选项-1选项”)。每个(功能(即,e){
$("")
.attr(“value”,$(this.val())
.attr(“选中”,i==0)
。单击(函数(){
$(“#options-1”).val($(this.val());
})
.附于(“#r”);
$(“#选项-1”)。更改(函数(){
$(“input[name='r'][value=”+this.value+“']”)attr(“checked”、“checked”);
});
});
});
$(“#选项-1”)。更改(函数(){
$(“input[name='r'][value=”+this.value+“']”)attr(“checked”、“checked”);
});
事实上,我添加了这个-它只是负责将一些菜单转换为单选按钮,而单选按钮则是另一整罐蠕虫。我真正感兴趣的是如何检测#options-1I的更改我无法编辑插件的HTML,因此我需要在不丢失功能的情况下使用jQuery引入一些表单元素。没有onchange处理程序(据我所知)。第一个select具有id options-1,它只是基于该选项从中获取值。因此,如果我尝试使用onchange或onClick事件处理程序调用此函数,我将如何操作?有那么简单吗?这取决于你想做什么。如果代码设置正确,并且您只需要触发在更改#option-1时执行的函数,那么您应该能够执行$('#option-1').change();这将告诉脚本下拉列表已更改并相应地做出响应(当您fdo类似于$(“#option-1”).val(“新值”)时,下拉列表不会更改的原因是,有时这并不是您希望它执行的操作。更改();必须手动触发(在脚本中或通过“手动”输入))我不确定你是否看到了我的另一篇文章,但我正在尝试使用jquery将下拉列表替换为单选按钮。单选按钮成功更改了下拉列表#1中的值,但随后的更改不会出现在下拉列表#2中。。。我已经在使用$(“#options-1”)。当用户选择其中一个单选按钮时进行更改,但下拉菜单#2中仍然没有更改。