2012-10-08 29 views
1

我有3 <select>菜單,每個菜單都有改變事件的工作。破解密碼的下跌看起來是這樣的:多個變化事件

$(document).ready(function(){ 
    // some code 

    $("#selectOne").change(function() { 
     // some code inc ajax request 

     $("#selectTwo").change(function() { 
      // some code inc a different ajax request 
     }); 

     $("#selectThree").change(function() { 
      // some code inc a yet another ajax request 

     }); 
    }); 
}); 

上述的問題是,雖然selectOne工作正常,並selectTwo似乎做工精細也是,如果我改變selectThree,代碼爲兩個selectTwo和selectThree火災與此同時。根據3個選擇中任何一個的選擇順序,selectThree.change的響應可以是在顯示不正確的響應之前顯示和隱藏每個先前的響應。

我想要做的是這樣的:

$(document).ready(function(){ 
    // some code 

    $("#selectOne").change(function() { 
     // some code inc ajax request 
    }); 

    $("#selectTwo").change(function() { 
     // some code inc a different ajax request 
    }); 

    $("#selectThree").change(function() { 
     // some code inc a yet another ajax request 

    }); 
}); 

在這種情況下,selectOne工作正常,但selectTwo和selectThree不響應變化。

是否有糾正任何這種情況的方法,以便每個元素髮生更改時,只有正確的更改事件被觸發?

+3

你可以發佈你的HTML嗎? – BenM

+0

你的第二塊代碼應該可以找到。該錯誤必須在代碼顯示和隱藏先前的選擇。 – Cimbali

+0

相當長 - [試試這裏](http://www.insightdesign.com.au/test.js) – Moniarde

回答

2

看來,當你的文件加載時,沒有選擇元素的ID爲「selectTwo」或「selectThree」。同樣,在第一種情況下,執行「selectOne」的事件處理程序時不會出現「selectThree」。這就是相應的事件處理程序不執行的原因。有兩種方法可以處理這個問題。

1 -創建元素時分配處理程序。

2 -使用.on()而不是.change()

$('body').on("change", "#selectOne", function() {}); 

$('body').on("change", "#selectTwo", function() {}); 

$('body').on("change", "#selectThree", function() {}); 
+0

jQuery 1.7不贊成直播,我們使用[.on()](http://api.jquery.com/on /)現在用於事件處理程序。它被調用爲'$('element')。on('event,'#bindedElement',function(){})'; – Ohgodwhy

+0

@Ohgodwhy謝謝。建議編輯。 –

+0

我試過上面的第二個選項沒有運氣,在selectTwo上改變並不會觸發任何東西。我不確定如何使用'bindedElement'作爲@Ohgodwhy推薦 - 你能給我一個使用我的故障的例子嗎? – Moniarde