我有一個可選的電話號碼的HTML輸入,用2個無線電輸入(留言,不要留言)沿着:的JavaScript onkeypress事件延遲的觸發
<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;
}
現在的問題:當我在2個字符類型的默認選項是時纔會觸發,而不是期望1(?簡直就像在代碼中的延遲) 。如果在開始輸入之前選擇了「否」,則輸入2個字符後,默認爲「是」。同樣,在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;
}
}
基本上我想知道爲什麼代碼的行爲就像有一個延遲,有沒有辦法解決它?
,似乎工作,你能解釋一下爲什麼嗎?我以爲keypress基本上是「onkeydown + onkeyup」 –
他們被解僱的順序是onkeydown,onkeypress,onkeyup。由於您正在對值進行評估,通過將其移至onkeyup,您可以確保在執行toggleRadio檢查之前字段的值已更改。隨着keydown和按鍵,你在字段被修改之前檢查。此外onkeypress不會被解僱的所有鍵。 – Speedy