jquery 1.9.1 .trigger()没有将参数传递给click-handler

use*_*919 10 jquery triggers parameter-passing

使用jQuery 1.9.1参数不会从触发器传递给click处理程序,就像使用jquery 1.7.2一样,它们很好地传递.

举例说明:

<!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>
Run Code Online (Sandbox Code Playgroud)

当我使用jquery-1.7.2.js时,它仍然可以正常工作.

我错过了什么?请帮我.

ant*_*hok 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'});        
});
Run Code Online (Sandbox Code Playgroud)

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

在任何情况下触发点击都是邪恶的(如果只是为了运行回调)

  • 回应@antishok:不要以这种方式触发点击.将处理程序代码分离到自己的函数中,然后直接调用它. (3认同)