Javascript 检查是否在按下键事件中选择了文本

Javascript 检查是否在按下键事件中选择了文本,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有一个场景,我阻止用户输入小数点后的第二个数字。我有我的keydown事件代码。 下面是我的代码: $scope.Inputkeydown = function (event, value) { if (event.keyCode != 8) { if (value != null && value != undefined && value != "") { var regex = /^\d*\.

我有一个场景,我阻止用户输入小数点后的第二个数字。我有我的keydown事件代码。 下面是我的代码:

$scope.Inputkeydown = function (event, value) {        
    if (event.keyCode != 8) {
        if (value != null && value != undefined && value != "") {
            var regex = /^\d*\.\d$/;  //this regex passes only decimal numbers with one digit after decimal
            if (regex.test(value)) {                   
                    event.preventDefault();
            }
        }
    }

};     
现在的问题是,如果用户在文本框中选择文本(比如50.0),然后按5,那么它也会被阻止,因为在文本框中,值是50.0,regex允许它进入,并且会被阻止输入


我是否可以检查keydown是否正在复制文本??或者还有其他方法吗?

您可以在按键后将其删除,而不是阻止用户输入:

function filterDecimals(inp) {
    return inp.replace(/^(\d*\.\d)\d*$/g, '$1');
}
或者,如果要删除后面的所有内容,请将第二个
\d*
替换为
*

编辑(用法示例)

此函数将文本作为输入并返回新的过滤文本。要使用它,只需在
keypress
上附加一个事件处理程序,如下所示:

<input type="text" id="filteredbox">

<script>
var txt = document.getElementById("filteredbox");

// on keyup event (you can change to keypress if you want, but this is more logical here
txt.addEventListener("keyup", function(){
    // sets value of txt to the returned data from filterDecimals()
    // if statement: only filters it if necessary; this eliminates the "selected text" issue you mentioned
    if (this.value !== filterDecimals(this.value)) {
        this.value = filterDecimals(this.value);
    }
});
</script>

var txt=document.getElementById(“filteredbox”);
//on keyup事件(如果需要,您可以更改为keypress,但此处更符合逻辑
addEventListener(“keyup”,function()){
//将txt的值设置为filterDecimals()返回的数据
//if语句:仅在必要时对其进行过滤;这将消除您提到的“选定文本”问题
if(this.value!==filterDecimals(this.value)){
this.value=filterDecimals(this.value);
}
});

您可以在按键后将其删除,而不是阻止用户输入:

function filterDecimals(inp) {
    return inp.replace(/^(\d*\.\d)\d*$/g, '$1');
}
或者,如果要删除后面的所有内容,请将第二个
\d*
替换为
*

编辑(用法示例)

此函数将文本作为输入并返回新的过滤文本。要使用此函数,只需在
按键上附加一个事件处理程序,如下所示:

<input type="text" id="filteredbox">

<script>
var txt = document.getElementById("filteredbox");

// on keyup event (you can change to keypress if you want, but this is more logical here
txt.addEventListener("keyup", function(){
    // sets value of txt to the returned data from filterDecimals()
    // if statement: only filters it if necessary; this eliminates the "selected text" issue you mentioned
    if (this.value !== filterDecimals(this.value)) {
        this.value = filterDecimals(this.value);
    }
});
</script>

var txt=document.getElementById(“filteredbox”);
//on keyup事件(如果需要,您可以更改为keypress,但此处更符合逻辑
addEventListener(“keyup”,function()){
//将txt的值设置为filterDecimals()返回的数据
//if语句:仅在必要时对其进行过滤;这将消除您提到的“选定文本”问题
if(this.value!==filterDecimals(this.value)){
this.value=filterDecimals(this.value);
}
});

您是否尝试在
按键时触发此操作?如果小数点后的值为零,您希望用户允许输入数字?您是否尝试在
按键时触发此操作?如果小数点后的值为零,您希望用户允许输入数字?我是否可以在按键时执行此操作?我不确定您的代码是什么样子,但我已经编辑了我的代码请用一个例子回答。如果您需要更多帮助,请告诉我。呜呜!再次编辑我的代码以修复错误。这现在应该对您有效。我是否可以在按键下执行此操作?我不确定您的代码是什么样子,但我已用一个例子编辑了我的答案。如果您需要更多帮助,请告诉我。呜呜!再次编辑我的代码以修复错误。这我现在为你工作。