2012-02-23 92 views
0
$(document).ready(function(){ 
    console.log("1"); 
    $('#selectid').triggerHandler('change'); 
    $('#selectid').trigger('change'); 
    $('#selectid').change(); 
    console.log("2"); 
    $('#intervention1-form').change(function() { 
     console.log('WHY DOESNT THIS HAPPEN?'); 
    }); 
}); 
console.log("0"); 

控制檯輸出應該是:觸發器不上負荷工作

0 
1 
WHY DOESNT THIS HAPPEN? 
2 

但是,相反,它只是:

0 
1 
2 

的背景是,我填充不同的HTML元素當選擇菜單(selectid)改變時的東西。但是,當頁面首次加載時,我想要觸發選擇菜單,就好像它被更改一樣,以便HTML元素具有內容,即使用戶不更改選擇菜單。

回答

0

您可以將更改處理您的控制檯登錄,你已經觸發了更改後。

所以你只捕獲改變的那一刻起發生的事件綁定你的改變處理,而不是在這之前

所發生的代碼更改到這會解決這個問題的:

$(document).ready(function(){ 
    $('#intervention1-form').change(function() { 
     console.log('WHY DOESNT THIS HAPPEN?'); 
    }); 
    console.log("1"); 
    $('#selectid').triggerHandler('change'); 
    $('#selectid').trigger('change'); 
    $('#selectid').change(); 
    console.log("2"); 
}); 
console.log("0"); 

現在你有你想要的輸出,因爲你在觸發它之前綁定了更改處理程序。

+1

不要忘恩負義,但老實說,爲了這個社區和幫助其他類似問題的人,我投票贊成ShankarSangoli的答案是正確的。他是第一個,而且比我的解釋更好。 – Sander 2012-02-23 07:12:57

1

因爲您之後附加了點擊處理程序。 trigger("change")執行附加到change事件的匹配元素的所有處理程序和行爲。如果沒有附加處理程序,則沒有任何執行。

試試這個。

$(document).ready(function(){ 
    console.log("1"); 
    $('#intervention1-form').change(function() { 
     console.log('WHY DOESNT THIS HAPPEN?'); 
    }); 
    $('#selectid').change(); 
    console.log("2"); 
}); 
console.log("2"); 

側面說明:調用trigger("change")change()方法是同一個。

的.triggerHandler()方法的行爲類似於.trigger(),與 以下例外:

  • 的.triggerHandler()方法不會導致事件的默認行爲發生(如表單提交)。
  • 雖然.trigger()將對jQuery對象匹配的所有元素進行操作,但.triggerHandler()僅影響第一個匹配的元素。
  • 使用.triggerHandler()創建的事件不會冒泡DOM層次結構;如果它們不是直接由目標元素處理,那麼它們什麼都不做。
  • 而不是返回jQuery對象(以允許鏈接),.triggerHandler()返回最後一個
    處理程序返回的任何值它引起執行。如果沒有處理程序被觸發時,
    返回undefined
+0

謝謝,這是問題!我不能相信我錯過了這一點。 :) – brentonstrine 2012-02-23 02:09:13