javascript - 在事件委托(delegate)中传递 jQuery 对象

标签 javascript jquery

// Snippet 1
$(document).on("keyup blur", "#selector_1_id", function() {
    // DO SOMETHING
});

$(document).on("keyup blur", "#selector_2_id", function() {
    // DO SOMETHING
});


// Snippet 2
var selector_1_id = $("input[name=selector_1_id]");
var selector_2_id = $("input[name=selector_2_id]");

$(document).on("keyup blur", selector_1_id, function() {
    // DO SOMETHING
});

$(document).on("keyup blur", selector_2_id, function() {
    // DO SOMETHING
});

为什么这些片段的行为似乎有所不同?虽然第一个实际上看起来很理想,那就是 keyup 和 blur 实际上在 keyup 和 blur 事件上应用在选择器上,而另一个似乎没有那么理想地工作,它的行为就像代码片段一直在运行。

我正在使用 JavaScript 在实时网站上启用和禁用输入类型。

最佳答案

您不能像那样通过该函数传递元素,它必须是 string 选择器。

$(document).on("keyup blur", selector_2_id, function() {
    // DO SOMETHING
});

不会工作,事实上 keyupblur 每次都会在文档而不是选择器上触发

如果您在变量中有该元素,则无需执行此操作,因为无论如何您都有对该元素的引用,您只有在可以随时添加该元素并且您没有对它的引用时才使用它。

所以

selector_2_id.on('keyup blur', function() {
   // DO SOMETHING
});

应该可以完美地工作。

深入观察

A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.

那么这个是什么意思呢

$(document).on('keyup blur', selector_2_id, function(){
  ^------^ = 1               ^-----------^ = 2
});

如果2null省略,则1将用于事件

关于javascript - 在事件委托(delegate)中传递 jQuery 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17868378/

相关文章:

javascript - Array.filter 没有返回所需的输出

javascript - 拖动任何devexpress组件时如何防止其他元素突出显示?

javascript - jQuery 循环页数变化 "onSlide"

jquery - 使用 jQuery 选择具有特定类的所有第一?

javascript - jQuery 如何在父节点上使用额外的选择条件?

javascript - 在 JavaScript If/else 语句中,如何根据条件呈现脚本标签?

javascript - 使用 JavaScript 访问框架的文档对象

javascript - 在新打开的窗口中打开另存为对话框

javascript - 克隆 <li> 并使用 jQuery 抛出

jQuery如何根据表标题选择表中的列