我需要在输入字段中随时只有1个字符。我能想到这样做的唯一方法就是让javascript保持盒子中的所有内容始终被选中并使最大输入长度为1,这样当我输入新内容时,其中的任何内容都会被覆盖(因为它被选中)。这样我就不必使用退格或任何东西了。到目前为止,我只是在单击框中时选择了所有内容。我有这个:
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不起作用)。知道我怎么能永久选择那个盒子里的所有东西?或者是否有更好的方法来保持盒子中的单个角色?
答案 0 :(得分:3)
如果你正在使用jQuery(我强烈推荐)你可以简单地附加keybinding事件来更新值。几个星期前我偶然发现了这个:
$("#my_input").keyup(function(event) {
$(this).val(String.fromCharCode(event.keyCode));
});
答案 1 :(得分:1)
这个算法怎么样:
onfocus :选择所有内容
onkeydown :删除所有内容
onkeyup :选择所有内容
如果您需要内容始终有效(即,您需要在框中包含一个有效字符),您可以对keyup和blur进行一些额外的验证。如果值有效,请将某个有效值保存。如果该值无效,则恢复先前的有效值。
这将处理按下键的方式类似于“tab”或“enter”按钮的情况。
此逻辑可能无效,具体取决于您在按键时采取的其他操作(如果有)。但是考虑到你问题中的参数,这听起来会有效。
概念证明代码。修改你的问题和品味。
<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>
答案 2 :(得分:0)
相反,只是处理关键事件,返回false(阻止字符实际插入)并使用DIV或其他东西实际上保留了您感兴趣的密钥?
答案 3 :(得分:0)
Onfocus应该用于标记到字段中,但您还需要捕获OnClick,因为单击会移动光标(因此取消选择)以及选择字段。
答案 4 :(得分:0)
在HTML中执行此操作有什么问题?
<input maxlength="1"/>