2013-03-10 22 views
9

Với đối số jQuery 1.9.1 không được chuyển từ trình kích hoạt đến trình xử lý nhấp chuột, như ở đó với jquery 1.7.2 chúng được truyền đi một cách độc đáo.jquery 1.9.1 .trigger() không chuyển đối số đến trình xử lý nhấp chuột

Một ví dụ để chứng minh:

<!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> 

Khi tôi sử dụng jquery-1.7.2.js nó vẫn hoạt động tốt.

Tôi đang thiếu gì? Làm ơn giúp tôi.

+0

Tại sao bạn đóng 'body' trước' script'? – kapa

+0

Không có cú pháp nào dường như hoạt động sau khi thử nghiệm, có vẻ như một lỗi. –

+1

Trông giống như một lỗi lạ. http://jsfiddle.net/xHVDx/1/ – kapa

Trả lời

7

Đó là một vấn đề được biết: http://bugs.jquery.com/ticket/13353

Cách giải quyết là sử dụng .triggerHandler() thay vì ví dụ:

$('#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

nhấp chuột kích hoạt là ác trong mọi trường hợp (nếu mục đích chỉ để chạy gọi lại)

+3

Echoing @antishok: Không kích hoạt nhấp chuột theo cách này. Tách mã trình xử lý ra thành hàm riêng của nó và gọi nó trực tiếp thay thế. –

Các vấn đề liên quan