2010-08-14 34 views
1

我有一個擁有多個選擇列表的頁面,並且使用jQuery的.change()函數更改了選擇列表之一時,我更改了select中旁邊的文本名單。加載頁面時,每個範圍中都有一些文本(每個範圍的文本都不相同)。問題是當頁面加載.change()函數循環遍歷所有選擇列表來改變每個區間中的文本時。我不想讓用戶在列表中選擇一個不同的項目時,跨度中的文本會發生變化。我不能只檢查是否有跨度中的文本,因爲如果用戶確實更改了選定的項目,那麼不管是否有文本,我只是不想在頁面加載。那麼,如何在頁面加載時讓.change()函數停止觸發?代碼:讓jQuerys .change()在頁面加載時運行

JS/jQuery的

$(document).ready(function() { 
    $("select").change(function() { 
    var txt = $(this).val(); 
    $(this).next('span').text(txt); 
    }).trigger('change'); 
}); 

HTML(重複多次)

<select name="animal[]"> 
<option value="dog" selected="selected">dog</option> 
<option value="cat">cat</option> 
<option value="bird">bird</option> 
<option value="snake">snake</option> 
</select> 
<span class="out">text that shouldn't be replaced until user changes selected item</span> 

感謝您的幫助!

回答

4

「變更」觸發,因爲您的代碼告訴它!.trigger("change")的調用說,請「運行'更改'事件處理程序」。所以,拿出來。現在

,問題是,在原因你寫的代碼這種方式可能是確保該<select>元素的設置,真正體現了什麼行爲應該是當用戶手動進行相同的更改。例如,有時會出現這樣的表格,其中部分輸入應該被禁用,除非<select>被設置爲某個選項。通過在頁面加載時觸發「更改」事件,代碼可以確保這些規則生效。如果你只是拿出那個觸發器,事情可能不正確,就是我所說的。該處理程序看起來很簡單,所以也許問題是這個代碼是從其他地方剪切粘貼的。

+0

那麼,這只是讓我看起來很愚蠢,我添加它時,我有問題得到它原來的工作,並沒有刪除它。感謝您的解釋! – Scott 2010-08-14 12:34:49

5

你只需要刪除此電話:

.trigger('change') 

這是什麼調用您剛剛綁定的$("select").change(function() { ... })處理程序。默認行爲是等待change事件發生...... .trigger('change').change()(無參數)將模擬change事件,使該處理程序開始工作。