2013-03-10 9 views
9

Z jQuery 1.9.1 argumenty nie są przekazywane z wyzwalacza do obsługi kliknięcia, tak jak w przypadku jquery 1.7.2 są ładnie przekazywane.jquery 1.9.1 .trigger() nie przekazuje argumentów do obsługi kliknięcia

Przykładem wykazać:

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

Gdy używam jQuery 1.7.2.js nadal działa dobrze.

Czego mi brakuje? Proszę pomóż mi.

+0

Dlaczego zamykasz 'body' przed' skryptem' ?? – kapa

+0

Żadna z składni wydaje się działać po testach, wydaje się być błędem. –

+1

Wygląda jak dziwny błąd. http://jsfiddle.net/xHVDx/1/ – kapa

Odpowiedz

7

To znany problem: http://bugs.jquery.com/ticket/13353

Obejście jest użycie .triggerHandler() zamiast np

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

Wyzwalanie kliknięć jest złe w każdym przypadku (jeśli zamiarem wystarczy uruchomić wywołanie zwrotne)

+3

Echoing @antishok: nie uruchamiaj kliknięć w ten sposób. Oddziel kod programu do własnej funkcji i wywołaj go bezpośrednio. –