JavaScript onkeypress отложенный триггер

0

У меня есть html-ввод для дополнительного номера телефона, а также 2 радиовхода (Оставить сообщение, Dont Leave Message):

<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;
}

Теперь для проблемы: параметр по умолчанию yes срабатывает только тогда, когда я набираю 2 символа вместо нужного 1 (почти как задержка в коде?). Если у меня есть "Нет" до того, как я начну печатать, по умолчанию будет да, когда я наберу 2 символа. Аналогично для обратного, ничто не onkeypress, если в событии onkeypress присутствует 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;
    }
}

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

Теги:
javascript-events

1 ответ

2
Лучший ответ

Вместо этого попробуйте использовать onkeyup:

onkeyup="toggleRadio(this)"
  • 0
    Кажется, это работает, вы можете объяснить, почему? Я думал, что нажатие клавиш было в основном "onkeydown + onkeyup"
  • 2
    Порядок, в котором они увольняются, - onkeydown, onkeypress, onkeyup. Поскольку вы выполняете оценку значения, переместив его в onkeyup, вы можете убедиться, что значение поля изменилось, прежде чем выполнять проверку toggleRadio. С keydown и keypress вы проверяли, прежде чем поле было изменено. Также onkeypress не срабатывает для всех клавиш.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню