javascript持久选择

时间:2009-12-21 21:06:24

标签: javascript

我需要在输入字段中随时只有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不起作用)。知道我怎么能永久选择那个盒子里的所有东西?或者是否有更好的方法来保持盒子中的单个角色?

5 个答案:

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