检查事件是否已绑定(KEYUP)

时间:2016-01-14 12:58:44

标签: javascript jquery events bind

我有以下代码:

$(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();});
    });
});

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

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

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

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

提前致谢!

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

这些是关于'点击'事件,而不是'keyup'事件,我不太了解它们。 :/

1 个答案:

答案 0 :(得分:0)

$name.one('keyup',function(){addSaveEvent($save);});

jQuery docs for one

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