2013-03-10 104 views
9

jQuery 1.9.1參數不會從觸發器傳遞到點擊處理程序,因爲在jquery 1.7.2中它們被很好地傳遞。jquery 1.9.1 .trigger()不將參數傳遞給點擊處理程序

一個例子來說明:

<!doctype html> 
<head> 
     <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
     <!--script src="http://code.jquery.com/jquery-1.7.2.min.js"></script--> 
</head> 
<body> 
    <input id="test" type="checkbox"> 
    <button id='trigger'>trigger</button> 

</body> 
    <script> 
     $('#test').bind('click', 
      function (e, data){ 
       if (typeof data == 'undefined') { 
        alert('no data passed'); 
        return; 
       } 
       alert('first passed=' + data.passed1 + ' second passed='+data.passed2); 
      }); 

     $('#trigger').click(
      function (e){ 
       $('#test').trigger('click',{passed1:'first',passed2:'second'}); 

     }); 
    </script> 
</html> 

當我使用jQuery的1.7.2.js它仍然能正常工作。

我錯過了什麼?請幫幫我。

+0

爲什麼你在'script'之前關閉'body'? – kapa 2013-03-10 23:15:10

+0

測試後,沒有任何語法似乎能夠工作,看起來像是一個錯誤。 – 2013-03-10 23:21:50

+1

看起來像一個奇怪的錯誤。 http://jsfiddle.net/xHVDx/1/ – kapa 2013-03-10 23:24:15

回答

7

這是一個衆所周知的問題:http://bugs.jquery.com/ticket/13353

解決方法是使用.triggerHandler(),而不是如:

$('#trigger').click(function (e) { 
    var $test = $('#test');  
    $test 
     .prop('checked', !$test.prop('checked')) 
     .triggerHandler('click',{passed1:'first',passed2:'second'});   
}); 

的jsfiddle:http://jsfiddle.net/antishok/xHVDx/2

觸發點擊在任何情況下,邪惡的(如有意向只是爲了運行回調)

+3

回聲@antishok:不要觸發點擊這種方式。將處理程序代碼分離到它自己的函數中,然後直接調用它。 – 2013-03-27 00:53:00

相關問題