0

我有一个可选电话号码的 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>" />

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

这里的场景是:当有人开始输入输入时,它会检查是否已经选中了一个单选按钮。如果没有,默认选择yes。如果由于某种原因他们不想提供电话号码而删除了电话号码,则应取消选择两个单选按钮(只有 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 个字符后默认为是。同样对于反向,当事件期间有 0 个字符时,不会“取消选择”任何内容onkeypress,仅当事件期间输入失去焦点时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;
    }
}

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

4

1 回答 1

2

尝试使用 onkeyup 代替:

onkeyup="toggleRadio(this)"
于 2013-09-30T15:09:25.790 回答