0

我正在使用 jQuery v1.7.1 并将事件绑定到元素,如下例所示:

<input id="testTextBox" name="testTextBox" type="text" value="" />

<script type="text/javascript">
    function evtHandler() {
        alert("Event fired!");
    }

    $(function() {
        $("#testTextBox").bind("change", evtHandler);
    });
</script>

显然我的页面有比这更多的控件,包括一些 Ajax 来替换页面的某些部分。因此,在测试期间,我希望有一种简单的方法来查看事件是否成功绑定。我知道我可以$("#testTextBox").length在绑定之前检查以确定是否找到了控件,但这是最好的也是唯一的方法吗?

4

2 回答 2

3

事件不会绑定的唯一原因是 DOM 元素不存在。

您可以通过填充方法来捕获它.on(不要使用.bind- 它已过时,尽管下面的技术仍然有效):

(function($) {
    var _on = $.fn.on;

    $.fn.on = function() {
        if (this.length) {
            return _on.apply(this, arguments);
        } else {
            throw new Error('.on called on empty jQuery object');
        }
    };
})(jQuery);

出于测试目的,您还可以扩展此函数以通过检查每个元素数据中的现有处理程序来测试重复.data('events')事件注册,如@paulitto 所述。但是请注意,这是对 jQuery 内部结构的深入研究,可能会在未来版本中发生变化。

于 2013-05-31T10:27:38.673 回答
1

对于您的 jquery 版本,您还可以检查元素的“事件”jquery 数据

这会将绑定到 testTextBox 的事件作为对象抛出到控制台:

console.log($('#testTextBox').data('events'));
于 2013-05-31T10:33:29.680 回答