【问题标题】:Javascript Keyboard Event change marked textJavascript键盘事件更改标记文本
【发布时间】:2016-12-05 08:27:26
【问题描述】:

我有一个如下所示的输入字段:

<input type="text" name="definemonth" value="'.$monthStart.'" class="form-control"
onkeypress="return isNumberKey(event, this.value);" />

为了只允许 1 到 28 之间的数字(每个都包括在内),我编写了这段 JS 代码:

var input = event.key;
var newValue = value + input;

if(input == "ArrowLeft" || input == "ArrowRight" || input == "ArrowUp" ||
   input == "ArrowDown" || input == "Backspace" || input == "Delete" || input == "Enter")
{
    return true;
}

if (!input.match("^[0-9]$") || newValue > 28 || newValue < 1)
{
    return false;
}

return true;

它主要按我的意愿工作。我希望能够使用箭头键、退格键和删除按钮,它们都可以正常工作。但问题是我不能标记文本然后添加一个新数字。标记我的意思是这种标记: 标记工作正常,但任何击键都不会改变任何东西。

我尝试用

检测
console.log(input);

那里发生了什么,但我在控制台中根本没有得到任何输出。

我的问题是,例如,当标记文本并键入 1 时,我该如何更改代码才能输入新值。

【问题讨论】:

    标签: javascript html keyboard dom-events


    【解决方案1】:

    在检查新值是否允许之前,您应该清除选定的文本。

    像这样:

    var clearValue = element.value;
    clearValue = clearValue.slice(0, element.selectionStart) + clearValue.slice(element.selectionEnd);
    
    var newValue = clearValue + input;
    

    jsfiddle

    【讨论】:

    • 太好了,这行得通。但我并不完全理解。我会接受你的回答,如果你能解释一下,我也会投赞成票:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2019-05-19
    • 2017-07-08
    • 2019-01-24
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多