Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Дважды вызывается blur (https://javascript.ru/forum/jquery/24363-dvazhdy-vyzyvaetsya-blur.html)

skfyann 27.12.2011 17:13

Дважды вызывается blur
 
Надеюсь, что объясню понятно, и проблема окажется простой...

Идея - при нажатии клавиши "enter" в текстовом поле запускается обработчик события blur, который выполняет определенные действия.

Проблема - обработчик события запускается дважды. Вот что я делаю не так - не понятно :(

$(document).ready( function() {

	$("#testText").keypress(function(e){
		if(e.keyCode == 13) {$("#testText").blur();}
	});

	$("#testText").blur(function(){
		alert(1);
	})

});

Nekromancer 27.12.2011 17:57

Нажатие на Enter в текстовом поле и так вызовет blur. Можете просто отменить действие по умолчанию, вызвав e.preventDefault() в теле вашего условия.

skfyann 27.12.2011 21:58

Цитата:

Сообщение от Nekromancer (Сообщение 146492)
Нажатие на Enter в текстовом поле и так вызовет blur.

Нет, не вызывается. Если бы это было так, то обработчик бы бы не нужен. Под текстовым полем я имел ввиду тег <input>, если я неправильно выразился.

Добавление e.preventDefault() не помогает, что естественно для этого случая.

devote 27.12.2011 22:04

еще бы ему не сработать, правильно делает что срабатывает..
Вы открываете алерт, который выводит фокус из элемента и срабатывает блюр

devote 27.12.2011 22:07

<input id="testText" type="text" />
<div id="debug">0</div>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready( function() {
 
    $("#testText").keypress(function(e){
        if(e.keyCode == 13) {$("#testText").blur();}
    });
 
    $("#testText").blur(function(){
        var el = document.getElementById('debug');
        el.innerHTML = parseInt( el.innerHTML ) + 1;
    })
 
});
</script>

Nekromancer 27.12.2011 22:10

skfyann,
таки да, срабатывает только change, причём конечно надо поменять что то.

skfyann 27.12.2011 22:19

devote,
Спасибо, понял в чем проблема.


Часовой пояс GMT +3, время: 09:29.