Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态添加onchange函数以使用jQuery下拉_Javascript_Jquery_Onchange - Fatal编程技术网

Javascript 动态添加onchange函数以使用jQuery下拉

Javascript 动态添加onchange函数以使用jQuery下拉,javascript,jquery,onchange,Javascript,Jquery,Onchange,我有两个下拉框,ID为country1、country2。。。当国家/地区在下拉列表中更改时,国家/地区的值应显示在警报框中 如果我像这样为一个框添加onchange处理程序,它可以正常工作: $('#country1') .live('change', function(e){ var selectedCountry = e.target.options[e.target.selectedIndex].value; alert(selectedCountry)

我有两个下拉框,ID为country1、country2。。。当国家/地区在下拉列表中更改时,国家/地区的值应显示在警报框中

如果我像这样为一个框添加onchange处理程序,它可以正常工作:

 $('#country1') .live('change', function(e){
        var selectedCountry = e.target.options[e.target.selectedIndex].value;
        alert(selectedCountry);
 });
但我需要为所有下拉框动态执行此操作,因此我尝试:

$(document).ready(function() {
  $('[id^=country]') .each(function(key,element){
    $(this).live('change', function(e){
      var selectedCountry = e.target.options[e.target.selectedIndex].value;
      alert(selectedCountry);
     });
  });               
});
这不管用。没有语法错误,但更改所选国家/地区时什么也不会发生。我确信每个循环都会执行几次,并且数组包含选择框

你知道吗

谢谢,
Paul

我将使用类而不是增量ID。然后,不推荐使用live方法,但您可以在最近的静态父级上或在文档上使用on和delegation

$('#closestStaticParent').on('change', '.country', function() {
  // this applies to all current and future .country elements
});
你不需要这样一个each循环;plus事件附加到jQuery集合中的所有元素,在本例中为所有.country元素。

原因.live existed用于说明调用选择器时不存在的元素

$'[id^=country]'。每个函数键,元素{迭代id以country开头的元素,但仅迭代运行选择器时存在的元素。它不适用于调用后创建的元素。每个元素,因此使用.live对您没有多大好处

将新样式的事件委派语法与该选择器一起使用,它应该可以工作:

$(document).on('change', '[id^=country]', function(e) {
    // ...
});
将文档替换为不动态生成的最近父级


此外,考虑将一个类添加到ID属性中。< /P>已被删除。使用.on。@ MigGiqALL:ID是唯一的ID^=“国家”,它从StrutEnter开始,从我知道的JQuery 1.7以来,方法是可用的,但我在瞬间被jQuery 1.6卡住,然后您仍然可以使用Live,但用类,如$'.country.live….这相当于在jQ 1.7+上执行$document.on'event','.country'。您仍然可以在1.6中使用事件委派,您只需自己根据选择器测试目标。$closestStaticParent.changefunctione{if$e.target.is.country//do something}@elclanrs:太好了,这很有效。仍然想知道为什么我的代码不起作用,但你的解决方案还是可读性更好。非常感谢……谢谢,就我所知,从jQuery 1.7开始,on方法就可用了,但我现在仍然坚持使用jQuery 1.6。当我运行选择器时,元素确实存在,它们不是动态创建的。它只是e创建的onchnage功能dynamically@Paul:我不知道你所说的动态创建的onchnage功能是什么意思。这救了我的命…花了两个小时试图找出如何从我的dyn下拉列表中进行选择并填充另一个close dd,该功能工作得非常好!