У меня есть HTML вход для дополнительного телефонного номера, а также с 2 радио входов (Оставьте сообщение, Dont Leave Message):JavaScript OnKeyPress отложенного срабатывания
<input type="text" class="input-medium phoneNum2" name="secondaryPhone" id="secondaryPhone" onkeypress="toggleRadio(this)" onblur="toggleRadio(this)" placeholder="703-555-1010" value="<cfoutput>#session.secondaryPhone#</cfoutput>" />
Примечание Я два события запуска (удаление один из них дает ту же самую проблему, и она помогает, но я предпочел бы иметь только 1 событие, если это необходимо).
Сценарий: второй кто-то начинает вводить ввод, он проверяет, проверена ли одна из переключателей. Если нет, по умолчанию выберите «Да». Если по какой-то причине они удаляют номер телефона, поскольку они не хотят его выдавать, обе переключатели должны быть отменены (только там работает onblur). И если «Не оставлять сообщение» выбрано до того, как пользователь начинает вводить текст, он не должен иметь значение «да».
Вот JavaScript:
function toggleRadio(x) {
y = document.getElementById("contactSecondaryYes");
z = document.getElementById("contactSecondaryNo");
if (x.value.length < 1) {
y.checked = false;
z.checked = false;
}
if (x.value.length > 0 && !z.checked) y.checked = true;
}
Теперь вопрос: Опция по умолчанию да только срабатывает, когда я типа в 2-х символов, а не желаемое 1 (? Почти как задержки в коде) , Если у меня есть «Нет» до того, как я начну печатать, по умолчанию будет да, когда я наберу 2 символа. Аналогично для обратного, ничто не отменяется, если в событии есть 0 символов, только если вход потеряет фокус во время события onblur
.
Я использую неправильные события? Есть ли логический недостаток? Нет сообщений об ошибках, и нет, я не могу использовать jQuery здесь, поэтому, пожалуйста, не давайте мне ответов jQuery или обычного «Почему нет jQuery?». (Я люблю jQuery, у меня просто есть причины, которые я не могу использовать).
Редактировать: Я также попытался заказать JavaScript, как это, безрезультатно.
function toggleRadio(x) {
y = document.getElementById("contactSecondaryYes");
z = document.getElementById("contactSecondaryNo");
if (x.value.length > 0 && !z.checked) y.checked = true;
if (x.value.length < 1) {
y.checked = false;
z.checked = false;
}
}
В основном я хочу знать, почему код действует как есть задержка, и есть ли способ это исправить?
Это похоже на работу, вы можете объяснить, почему? Я думал, что keypress был в основном «onkeydown + onkeyup» –
Приказ, который они запускают, - onkeydown, onkeypress, onkeyup. Поскольку вы оцениваете значение, переместив его в onkeyup, вы можете убедиться, что значение поля изменилось, прежде чем выполнять проверку toggleRadio. С помощью нажатия клавиш и нажатия клавиш вы проверяли, прежде чем поле было изменено. Также onkeypress не запускается для всех ключей. – Speedy