【问题标题】:Check if event already bound (KEYUP)检查事件是否已经绑定(KEYUP)
【发布时间】:2016-01-14 12:58:43
【问题描述】:

我有以下代码:

$(function(){

    var $name = $('#name'),
        $save = $('#save');

    function alertName(){

        var name = $name.val();

        return alert(name);
    };

    function addSaveEvent(elem){

        return elem.bind('click',function(e){e.preventDefault();alertName();});
    };

    $name.bind('keyup',function(){addSaveEvent($save);});
    $(window).load(function(){
        $save.bind('click',function(e){e.preventDefault();});
    });
});

功能是什么? 页面加载时,按钮“不可”点击,例如。按钮什么也不做。当输入字段“名称”发生变化时,按钮“变为”可点击并调用函数alertName()。

问题是什么? 每次输入 -> 每次新的“keyup”,所以如果您在输入字段“name”中输入“Hello”并单击按钮,函数 alertName() 被触发 5 次 (H E L L O)。如果您删除它并再次单击该按钮,则会触发 10 次(H E L L O [退格]x5)。

我认为每次触发 'keyup' 事件时,函数 addSaveEvent 都会绑定在保存按钮上。但我不想要这个,我只想绑定一次,而不是 5、10、...次。

如何检查事件是否已绑定到元素?如果不是 => 绑定,如果是的话 => 没有额外的绑定(但也没有解除绑定)?

提前致谢!

PS: 我检查了以下问题: - How to check if click event is already bound - JQuery - jQuery check if event exists on element

那些是关于“点击”事件的,而不是关于“按键”事件的,我不太了解它们。 :/

【问题讨论】:

    标签: javascript jquery events bind


    【解决方案1】:
    $name.one('keyup',function(){addSaveEvent($save);});
    

    jQuery docs for one

    简而言之:绑定一个在第一次触发时调用并移除的事件处理程序。

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2011-04-17
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多