javascript – 在jQuery中多次绑定事件到元素有一个敲击效果?

前端之家收集整理的这篇文章主要介绍了javascript – 在jQuery中多次绑定事件到元素有一个敲击效果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有下面的代码,如果新的串行按钮被按下多次,类serial的文本框将被多次绑定到事件.

这会妨碍性能吗?即使绑定方法被多次调用,jQuery也只会注册一次事件?

$(document).ready(function () {

    MonitorSerialTextBoxes();

    $('#newSerial').click(function () {

       $.tmpl("productTemplate",mymodel).insertAfter($(".entry").last());
       MonitorSerialTextBoxes();

    });

    function MonitorSerialTextBoxes() {
      $('.serial').each(function () {
         // Save current value of element
         $(this).data('oldVal',$(this).val());

         // Look for changes in the value
         $(this).bind("propertychange keyup input paste",function (event) {

         // If value has changed...
         if ($(this).data('oldVal') != $(this).val() && $(this).val().length == 10) {

             // Updated stored value
             $(this).data('oldVal',$(this).val());

             // Do action
         }
      });
    }

});

更新:我相信会将以下代码添加到MonitorSerialTextBoxes函数修复thiings?

$('.serial').unbind("propertychange keyup input paste");

从jQuery文档:

如果有多个处理程序注册,它们将始终按照绑定的顺序执行

解决方法

您可以将多个事件处理程序绑定到单个元素.以下将产生一个带有两个单击事件的按钮:
$("button").bind("click",myhandler);
$("button").bind("click",myhandler);

一个选择是首先取消绑定事件:

$("button").unbind("click").bind("click",myhandler);
$("button").unbind("click").bind("click",myhandler);

这将导致只有一个单一的点击事件.

如果您重新绑定事件,因为您的窗体具有动态添加的元素,那么您可能需要查看live()或new on(),这可以将事件绑定到可能尚不存在的元素.例:

$("button").live("click",myhandler); // All buttons (now and in 
                                      // the future) have this handler.

在Webkit开发工具(Safari和Chrome)中,您可以通过检查元素来查看哪些事件绑定到元素,然后在“元素”面板的右窗格中向下滚动.它在一个名为“事件侦听器”的可折叠框下. Firebug应该有类似的功能.

猜你在找的jQuery相关文章