Zablokowanie keyup() po focus()

0

Witam.

Mam taki kod:

<input id="firstInput" /><br>
<input id="secondInput" /><br>
<button id="button" onclick="buttonClick(this)">CLICK</button>
$(document).ready(function() {
	$('#firstInput').bind('keyup', function(e) {
		console.log(e.which);
		if (e.which === 13) {
    	firstEditEnterPressed();
    }
  });
});

function buttonClick(e) {
	console.log(e);
  $('#firstInput').focus();
}

function firstEditEnterPressed(){
 	$('#secondInput').focus();
	$('#secondInput').select();
}

https://jsfiddle.net/o5pm726e/1/

Problem pojawia sie gdy zamiast kliuknąć na przycisk przejdę na niego tablulatorem i nacisnę enter.
Wtedy oprócz uruchomienia funkcji buttonClick uruchamia się też funkcja firstEditEnterPressed

Jak temu zapobiec?

1

Jak zmieniłem na keypress to wydaje się działać spoko.

0

@szatkus - dziękuję, Twoja podpowiedź mi pomogła.

Musiałem jednak zrobić dwie funkcje - jedną dla keypress drugą dla keyup, ponieważ keypress nie obsługuje klawiszy strzałem a je też potrzebowałem.
Tak czy inaczej obsługa entera w keypress pomogła - funkcja nie jest wywoływana w nieoczekiwanym momencie :).

@katakrowa

Czyli działa tak jak masz w programie:-)

No nie do końca, bo enter naciskam będą na przycisku, a wywoływana była funkcja podpięta pod input

2

keypress jest już przestarzały: https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event

a weź spróbuj dodać w którymś handlerze e.preventDefault(). Albo nie wiem, ogólnie staraj się prześledzić, co się wykonuje w każdym momencie i do czego dane eventy dokładnie służą (patrząc na MDN).

No i trochę jQuery tutaj przeszkadza (bo zaciemnia obraz sytuacji). Ja bym w ogóle wypieprzył, chyba, że używasz do czegoś innego. Ale nie ma co zaprzęgać jQuery do paru eventów. To nie 2010 rok.

1 użytkowników online, w tym zalogowanych: 0, gości: 1