JavaScript onkeypress延迟触发

时间:2013-09-30 14:58:42

标签: javascript html javascript-events

我有一个可选电话号码的html输入,以及2个无线电输入(留言,留下留言):

<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>" />

注意我有两个事件在运行(删除其中一个产生相同的问题,两个都有帮助,但我宁愿只有一个事件,除非必要)。

这里的场景是:第二个人开始输入输入,它检查是否已经检查了其中一个单选按钮。如果没有,默认选择是。如果由于某种原因他们删除了电话号码,因为他们不想给它,则应取消选择两个单选按钮(只有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事件期间有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;
    }
}

基本上我想知道为什么代码表现得有延迟,有没有办法解决它?

1 个答案:

答案 0 :(得分:2)

尝试使用onkeyup:

onkeyup="toggleRadio(this)"