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

2 つのイベントを実行していることに注意してください (そのうちの 1 つを削除すると同じ問題が発生し、両方が役に立ちますが、必要でない限り、イベントは 1 つだけにした方がよいでしょう)。

ここでのシナリオは次のとおりです。誰かが入力に入力を開始すると、ラジオ ボタンの 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 は、目的の 1 文字ではなく、2 文字を入力したときにのみトリガーされます (コードの遅延のようなものですか?)。入力を開始する前に「いいえ」を選択した場合、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 に答える