2010-08-19 197 views
4

我有三个依赖选择。 第一个,有一些价值。jQuery选择“更改”事件未触发

<select id="first"> 
<option value="1">v1</option> 
<option value="2">v2</option> 
</select> 

第二和第三都是空白:

<select id="second"></select> 
<select id="third"></select> 

我想通过Ajax请求来填充空白的选择。 所以我做的:

jQuery('body').delegate('#first','change',function(){ 
jQuery.ajax(
{ 
'type':'GET', 
'data':{'changed':$('#first').val()}, 
'url':'myURL1', 
'cache':false, 
'success':function(html){jQuery("#second").html(html)}}); 
return false; 
}); 

所以它工作正常。第二个选择被填充,但是...没有'选择'第二个'更改'事件被触发。 为了得到这个事件中,我写道:

$(document).ready(function() 
    { 
     $('#second').live("change", function() 
     { 
      alert('test'); 
     }); 
    }); 

但是,没有警报“测试”是可见的。如何捕获动态加载内容的“更改”事件以供第二选择?

+1

您想在加载数据后立即启动#second的更改事件吗?如果您手动更改第二个选择,则警报框应与您的实际代码一起显示。 – davehauser 2010-08-19 14:51:17

+0

您使用的是哪个版本的jQuery? – 2010-08-19 14:54:34

+0

顺便说一句:我会acoid混合jQuery()和$() – davehauser 2010-08-19 14:54:43

回答

2

由于#second元素只是存在没有,如果你想在组装第二个选择以后做告警使用权委托和现场功能

$('#first').change(function(){ 
    $.ajax( 
    { 
    'type':'GET', 
    'data':{'changed':$('#first').val()}, 
    'url':'myURL1', 
    'cache':false, 
    'success':function(html){ 
     $("#second").html(html); 
    } 
    }); 
    return false; 
}); 

$('#second').live("change", function() 
{ 
    alert('test'); 
}); 

,然后包括在您的“关于” $。阿贾克斯()

$('#first').change(function(){ 
    $.ajax( 
    { 
    'type':'GET', 
    'data':{'changed':$('#first').val()}, 
    'url':'myURL1', 
    'cache':false, 
    'success':function(html){ 
     $("#second").html(html); 
     $("#second").change(); 
    } 
    }); 
    return false; 
}); 
+0

谢谢。 – x17az 2010-08-19 19:09:33

3

试试这个:

$('#second').change(function(){ 
    alert('Test') 
}) 
+0

试过了,结果相同:( – x17az 2010-08-19 15:09:49

1

您正在使用什么版本的jQuery?在1.4.x之前的任何内容都不支持changelive事件。

(见Why doesn't jQuery 1.3.3. live() support all events?

下面是API它http://api.jquery.com/live/

可以在注意事项,请参阅:

在jQuery的1.3.x的只有以下 JavaScript事件(除到 自定义事件)可以绑定到 .live():click,dblclick,keydown, keypress,keyup,mousedown,mousemove, mous eout,mouseover和mouseup。

+0

更改为.change(function(){})没有结果 – x17az 2010-08-19 15:10:10

0

据jQuery的jQuery的从1.7更新其版本的介绍的回调函数在这里看到http://api.jquery.com/on/。所以如果你明确地使用下面的方式,它会调用“更改”事件。

$(document).ready(function() 
{ 
    $('#second').on("change", function() 
    { 
     alert('test'); 
    }); 
});