如果我有下面的代码,那么如果多次按下新的serial按钮,serial类的文本框将多次绑定到事件。
这会影响性能吗?或者即使多次调用bind方法,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函数中是否可以修复这些问题?
$('.serial').unbind("propertychange keyup input paste");
在jQuery文档中:
- 如果注册了多个处理程序,则它们将始终按绑定的顺序执行 *
2条答案
按热度按时间jdzmm42g1#
您可以将多个事件处理程序绑定到一个元素。下面的代码将生成一个包含两个onclick事件的按钮:
一种选择是首先解除事件绑定:
这将只产生一个绑定的单击事件。
如果因为表单动态添加了元素而要重新绑定事件,则可能需要查看
live()
或新的on()
,它们可以将事件绑定到可能还不存在的元素。例如:在Webkit开发者工具(Safari和Chrome)中,你可以通过检查元素,然后在元素面板的右窗格中向下滚动来查看哪些事件绑定到了元素。它位于一个名为“Event Listeners”的可折叠框下。Firebug应该有类似的功能。
q5lcpyga2#
我认为这会导致大量的开销和一些问题,因为这些事件不止一次绑定。http://jsfiddle.net/nicolapeluchetti/syvDu/
加载页面时,单击div时会显示一个警告,但每次按下按钮时都会显示一个警告,因为附加了一个新事件