2009-12-21 52 views
0

我需要在輸入字段中隨時只有1個字符。我能想到做這件事的唯一方法是讓JavaScript始終選中所有內容,並使最大輸入長度爲1,這樣當我輸入新內容時,內容會被覆蓋(因爲它被選中)。這樣我就不必使用退格或其他任何東西。到目前爲止,只有當您點擊框時,才能獲得所有選擇。我有這樣的:javascript persistent選擇

input type="text" id="txt1" size="30" maxlength="1" onkeyup="showHint(this.value)" onFocus="this.select()" onBlur="this.select()" onClick="SelectAll('txt1');" value="Click here, then press a key"/> 

我有幾個不同的事情會在那裏設法得到它所有選擇的(像的onfocus和的onblur不工作)。任何想法如何讓這個箱子裏的所有東西永久選中?還是有更好的方法來保持箱子裏的單個字符?

回答

1

這個怎麼樣的算法:

的onfocus:選擇所有內容
的onkeydown:刪除所有內容
的onkeyup:全選內容

如果您需要的內容始終有效(即,您需要有一個瓦利d中的字符),你可以對keyup和blur做一些額外的驗證。如果該值有效,則在某處保存有效值。如果該值無效,則恢復先前的有效值。

這將處理被按下的按鍵與「選項卡」或「輸入」按鈕類似的情況。

此邏輯可能無法工作,具體取決於您在按鍵上採取的其他操作(如果有)。但考慮到你的問題中的參數,這聽起來像這將工作。

概念驗證碼。修改您的問題和口味。

<input id="test" onkeydown="deleteAllContent();" onfocus="selectAllContent();" 
    onkeyup="validate();selectAllContent();" onblur="validate();" maxLength="1"> 
    <script> 
var lastValid = "B"; 
function deleteAllContent() { 
    document.getElementById('test').value = ''; 
} 

function selectAllContent() { 
    document.getElementById('test').select(); 
} 

function validate() { 
    var value = document.getElementById('test').value; 

    if (value.length == 0) { // or whatever makes the value invalid 
     document.getElementById('test').value = lastValid; 
    } else { 
     lastValid = value; 
    } 
} 
</script> 
0

相反,只是處理關鍵事件,返回false(阻止實際插入的字符),並有一個DIV或其他東西,實際上堅持你感興趣的密鑰?

0

Onfocus應該用於標記字段,但您還需要捕獲OnClick,因爲點擊移動了光標(因此取消選擇)以及選擇字段。

0

在HTML中做什麼錯?

<input maxlength="1"/> 
+0

當用戶鍵入字段時,不會自動選擇內容,因此他們必須在鍵入另一個鍵之前使用退格鍵清除字段。 OP正在設法通過讓焦點自動選擇字段來準備接受新角色,從而簡化該體驗。 – richardtallent 2009-12-21 21:12:05

3

如果您使用jQuery(我強烈建議),您可以簡單地附加鍵綁定事件來更新值。我碰到這個意外來了幾個星期前:

$("#my_input").keyup(function(event) { 
    $(this).val(String.fromCharCode(event.keyCode)); 
}); 
+0

當通過該鍵超過maxlength時,或者僅當該鍵已成功添加到該值時,鍵鎖纔會觸發嗎?另外,如果按下的鍵是退格鍵會發生什麼?似乎會將該值設置爲0x08(其他特殊鍵的問題相同)。 – richardtallent 2009-12-21 21:14:04

+1

如果重要的是數據具有完整性,則需要處理所有特殊字符,但是,所有這些確實都是用最後一次按鍵替換現有值。它沒有考慮最大長度,因爲假設最大長度是1,用按下的鍵代替值。 – 2009-12-21 21:23:44