2013-04-15 27 views
0

我有一個包含三個選擇字段的表單。我想要第二個選擇基於第一個選擇填充,然後第三個填充基於第二個選擇。 所以物業類型 - >縣 - >城市。我的js的基本思想如下。在已更改的選擇的更改事件上觸發功能

$('.property_type').change(function(){ 
if(this.value == 'com'){ 
    $('.property_detail_county').html('MY HTML'); 
}else if((this.value == 'res')){ 
    $('.property_detail_county').html('MORE HTML'); 

} 

所有這些都在.ready()中。這工作正常。我的問題是,當你試圖編寫第二個函數來填充第二個選擇(城市)時,它不會觸發任何東西。這是我的第二個功能,也是準備好的。

$('.property_detail_county').change(function(){ 
console.log('Changed'); 

});

我的理論是,第二個函數永遠不會讀取或加載,因爲條件。你們知道另一種方式來做到這一點嗎?

在此先感謝。

P.s.如果這個問題已經得到解答,請隨時指出我的方向,我無法在任何地方找到這個問題。

+1

更改事件在用戶選擇值時觸發,而不是在您更改選擇的內容時觸發! –

+0

是什麼.property_detail_county選擇輸入或只是一些div?如果您需要在使用js更改其值後觸發更改,請使用trigger() – Huangism

+0

當您以編程方式更改第二個選項的值時,您需要手動觸發'.change()'事件。除非使用代碼來專門觸發它,否則當您使用代碼更改值時,不會調用'.change()'。 – jfriend00

回答

0

它取決於您在第二個下拉列表中放置的HTML。例如,如果HTML像:

<div id="a"><select>...</select></div> 

<div id="b">...</div> 

而JavaScript做到這一點:

if(this.value == 'com'){ 
    $('.property_detail_county').html('<select>...</select>'); 
} 

你已經完全取代了第二個SELECT語句,並沒有甚至依賴於它的變化。更改甚至與您替換的舊<select>相關聯。

你可以只恢復更改代碼:

if(this.value == 'com'){ 
    $('#b').html('<select id="sel_b">...</select>'); 
    $("#sel_b").click(function() { 
     ... the stuff to do when 2nd one is clicked ... 
    } 
} 

,如果你定義一個函數來處理第二組的東西,它確實工作得更好。

注意還有其他一些方法可以檢測到更改事件,因爲它會冒泡到<div>或DOM樹上的某個元素。你可以在jQuery文檔中閱讀。它被稱爲「事件代表團」。

+0

感謝您的回覆。這對我有效。 –