Natknąłem się na to pytanie: onKeyPress Vs. onKeyUp and onKeyDown, z którego dowiedziałem się, że keypress
ma być uruchamiany po wpisaniu znaku do tekstu. Próbuję uruchomić ten poniższy kod. Ma on sprawić, by tło wejściowe było żółte w momencie, gdy jego długość tekstu przekroczy 0, lub białe w momencie, gdy wynosi 0. Nie mogę sprawić, żeby działało. Gdy próbuję zrobić keydown
, mam następujące problemy:jQuery: Uzyskanie nowej wartości w obsłudze keydown
Gdybym wpisz jeden znak i puścić, tło pozostaje biały.
Jeśli w takim razie naciśnij
backspace
, usuwając tę jedną znak, zmieni się na żółtą (dokładnie naprzeciwko tego, czego chcę!). Jeśli teraz naciśnie dowolny inny klucz (Alt
,Shift
), zmieni kolor na biały. W rzeczywistości, jeśli zamiastAlt
lubShift
wpisuję znak, pozostanie on biały, przenosząc nas z powrotem do pierwszego problemu.Po naciśnięciu klawisza znaku i przytrzymaniu go, tło pozostaje białe dla pierwszego znaku i zmienia kolor na żółty, począwszy od drugiego znaku.
Gdy próbuję keyup
tylko, są to problemy (zgodnie z oczekiwaniami):
- W tle nie zmieni tak długo, jak klucze są przechowywane wciśnięty, nawet wtedy, gdy postać jest dodawany do puste dane wejściowe lub cały tekst został usunięty.
Jeśli spróbuję keypress
, napotkam te same problemy co keydown
, nawet jeśli ma działać.
Jeśli wiążę 3 ładowarki dla keyup
, keydown
i keypress
(! Bóg Jestem zdesperowany), prawie wszystkie problemy zostały rozwiązane z wyjątkiem problemu 3 z keydown
: gdybym typu prasy klucz znaków i przytrzymać go, tło pozostaje biały dla pierwszej postaci i zmienia kolor na żółty, począwszy od drugiego znaku.
Jak rozwiązać ten problem?
JS:
$(document).ready(function() {
$("input").bind("keydown", function() {
if ($(this).val().length == 0) {
$(this).css('background', 'white');
} else {
$(this).css('background', 'yellow');
}
});
$("input").bind("keypress", function() {
if ($(this).val().length == 0) {
$(this).css('background', 'white');
} else {
$(this).css('background', 'yellow');
}
});
$("input").bind("keyup", function() {
if ($(this).val().length == 0) {
$(this).css('background', 'white');
} else {
$(this).css('background', 'yellow');
}
});
});
HTML:
<input type='text' />
Tylko co ja obawiając! Nienawidzę timerów!Soczysty sposób na wycieki pamięci .. :( – SexyBeast
Eh, to śmierdzi, ale to twój jedyny wybór. Nawet autouzupełnianie jQuery-U robi to w ten sposób – MightyPork
O, oni to robią, on jest, to chyba nie ma żadnego obejścia! Jeśli John Resig nie może znaleźć obejścia, mam z tym wszystko dobrze :) Dziękuję bardzo! – SexyBeast