2010-08-19 251 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'); 
    }); 
});