jquery 1.9.1 .trigger() 没有将参数传递给点击处理程序

Posted

技术标签:

【中文标题】jquery 1.9.1 .trigger() 没有将参数传递给点击处理程序【英文标题】:jquery 1.9.1 .trigger() not passing arguments to click-handler 【发布时间】:2013-02-26 01:22:47 【问题描述】:

在 jQuery 1.9.1 中,参数不会从触发器传递到单击处理程序,而在 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>

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

我错过了什么?请帮帮我。

【问题讨论】:

你为什么在script之前关闭body?? 经过测试,似乎没有一种语法可以工作,似乎是一个错误。 看起来像一个奇怪的错误。 jsfiddle.net/xHVDx/1 您的原始语法似乎适用于非复选框:jsfiddle.net/9mD6a 它也适用于具有除单击之外的事件的复选框jsfiddle.net/9mD6a/1 似乎是一个极端错误。 这仍然适用于 1.8.3,但似乎支持到此为止。 【参考方案1】:

这是一个已知问题: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

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

【讨论】:

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

以上是关于jquery 1.9.1 .trigger() 没有将参数传递给点击处理程序的主要内容,如果未能解决你的问题,请参考以下文章

.draggable 的 Jquery .trigger('stop') 方法

Dojo 是不是有等效于 jQuery.trigger() 的功能?

如何获取 JQuery.trigger('click');启动鼠标点击

jquery的bind()和trigger()

jQuery 中 .trigger('play') 和 .play() 的区别

jquery同时trigger两个事件