javascript - 避免重复听众

标签 javascript jquery events onclicklistener

我需要将焦点设置在可排序列表的输入和文本区域元素上。
这是我的代码(1)。

a) 当我加载列表时,它工作正常,因为它为每个输入添加了一个监听器。
b) 当我向列表中添加一个新元素时,它会复制监听器。

应该如何避免呢?
也许尝试使用事件委托(delegate)在 body 上使用单个监听器? 有什么想法吗?
谢谢

(1)

setTimeout(function () {
    var setFocus = function () {
        $('.ui-sortable').find('input, textarea').click(function () {
            $(this).focus();
        });
    };
    $('.ui-sortable').on('DOMNodeInserted', setFocus);
    setFocus();
}, 0);

最佳答案

这应该有效:

$('body').on('.ui-sortable input, .ui-sortable textarea', 'click', function () {
    $(this).focus();
});

关于javascript - 避免重复听众,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750892/

相关文章:

Javascript:使用 try-catch 嵌套

带有回调函数的 Javascript 不起作用

javascript - 如何通过 .ajax 以 base64 编码发布图像?

jquery - 过滤多个前缀

node.js - 如何在nodejs和express中的一个地方处理异常

javascript - 使用来自 Firebase 的数据时,卸载组件出现 setState 错误

javascript - 访问 jQuery 文件中的 PHP session 变量

javascript - 在列表项上添加具有特定条件的属性值

c# - 在 C# 中无限/定期执行代码的最佳实践

ms-access - 如何通过 MS-Access VBA 中的 TextBox.OnKeyUp 属性传递 KeyCode