2013-09-30 4 views
0

У меня есть 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; 
    } 
} 

В основном я хочу знать, почему код действует как есть задержка, и есть ли способ это исправить?

ответ

2

Попробуйте использовать OnKeyUp вместо:

onkeyup="toggleRadio(this)" 
+0

Это похоже на работу, вы можете объяснить, почему? Я думал, что keypress был в основном «onkeydown + onkeyup» –

+2

Приказ, который они запускают, - onkeydown, onkeypress, onkeyup. Поскольку вы оцениваете значение, переместив его в onkeyup, вы можете убедиться, что значение поля изменилось, прежде чем выполнять проверку toggleRadio. С помощью нажатия клавиш и нажатия клавиш вы проверяли, прежде чем поле было изменено. Также onkeypress не запускается для всех ключей. – Speedy

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