2014-12-23 3 views
1

Я хочу вызвать функцию только один раз при фокусировке в элементе ввода. Следующий код вызывает функцию в бесконечном цикле.Как вызвать функцию один раз, после фокусировки на входном элементе?

<input type="text" class="dateRangeEducLev"> 
$(document).on("focusin",".dateRangeEducLev",function(e){  
    alert("focusIn"); 
}); 

Я мог бы изменить событие «OnClick», но это было бы вызывает функцию каждый раз, когда пользователь нажимает на элемент ввода, даже если входной элемент уже выбран. Это нежелательно.

Я пытался решить эту проблему, предотвращая распространение, но он не работает. это код:

$(document).on("focusin",".dateRangeEducLev",function(e){  
    alert("focusIn"); 
    e.stopPropagation(); 
}); 

http://jsfiddle.net/r1b06udo/1/

Любая идея в том, чтобы остановить распространение или ограничить функцию, которая будет вызываться только один раз?

Обновление: Если я использую off() или один(), то перестанет вызывать функцию навсегда до обновления браузера. Другая проблема заключается в том, что если у меня есть более одного элемента с одним классом, функция будет отключена для них.

http://jsfiddle.net/r1b06udo/2/

У меня есть новое обновление. Я выбираю unbind и bind. Если вы увидите, что он будет работать в первом раунде. Но если вы все еще фокусируетесь, они ничего не сделают, но если вы все еще сосредоточитесь на том, что это сработает для угадывания.

http://jsfiddle.net/456at7y8/

+0

использовать одну(), чтобы связать событие .it будет работать только один раз – yugi

+0

Привет Юги, почти нет. Ваша идея работает хорошо. Проблема заключается в том, когда пользователь щелкает элемент ввода и нажимает, функция не будет вызываться. Событие отключено навсегда до обновления браузера. Другая проблема заключается в том, что если у меня есть более одного элемента, «one()» отключит функцию для остальных. Я уточню свой вопрос. – zwitterion

+0

привет @zwitteron .i обновил мой ответ. Работает нормально сейчас. Проверьте это. – yugi

ответ

1

Вы можете вызвать off на обработчик focusin, чтобы запретить этот обработчик будет называться снова

$(document).on("focusin",".dateRangeEducLev",function(e){  
    alert("focusIn"); 
    $(document).off("focusin",".dateRangeEducLev"); 
}); 

Вызовом one является другим вариантом, как другие указали. Проблема в том, что я не знаю, что вы можете использовать его с делегированными событиями, как вы делаете с on. Вот почему я предложил этот подход.

Делегированные события кажутся ненужными в соответствии с тем, что вы показываете, в любом случае я пытался сохранить его на всякий случай.

+0

Hi Claudio. Есть ли способ связать функцию снова? Выключенная или одна функция отключает событие навсегда для этого раздела. – zwitterion

+0

@zwitterion: да, вы вызываете '$ (document) .on (" focusin ",". DateRangeEducLev ", function (e) {}' снова, когда вам это нужно. –

+0

Привет, Claudio, я использовал вашу идею, и она работает частично Вы видите, пожалуйста, мое обновление 3? – zwitterion

1

использовать один(), чтобы связать это событие

$(".demo1").on("focusin",function(e){  
 
    alert("focusIn"); 
 
    $(this).unbind("focusin"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" class="dateRangeEducLev demo1"/> 
 
    
 
<input type="text" class="dateRangeEducLev demo1"/> 
 
<input type="text" class="dateRangeEducLev demo1"/>

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