オプションの電話番号の 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;
}
}
基本的に、遅延があるようにコードが動作している理由を知りたいのですが、それを修正する方法はありますか?