2016-01-14 2 views
0

Я получил следующий код:Проверьте событие уже привязано (KeyUp)

$(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().

В чем проблема? Каждый раз, когда что-то набирается -> каждый раз появляется новая «клавиатура», поэтому, если вы введете «Hello» в поле ввода «name», и вы нажмете на кнопку, функция alertName() будет запущена 5 раз (H E L L O). Если вы удалите это и снова нажмите кнопку, он будет запущен 10 раз (H E L L O [backspace] x5).

Я думаю, что каждый раз, когда запускается событие «keyup», функция addSaveEvent привязывается к кнопке сохранения. Но я не хочу этого, я просто хочу, чтобы он был связан только один раз, а не 5, 10, ... раз.

Как проверить, связано ли событие с элементом? Если нет => bind, если so => ​​нет дополнительной привязки (но также NO unbind)?

Заранее благодарен!

PS: Я проверил следующие вопросы: - How to check if click event is already bound - JQuery - jQuery check if event exists on element

Это о событии «нажмите», а не о «KeyUp» события, и я не понимаю их очень Что ж. :/

ответ

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

jQuery docs for one

Вкратце: связывает обработчик события, который вызывается и удаляется в первый раз, он запускается.

Смежные вопросы