如何知道文本框中的文本是否被选中?

我有文本框<input type='text'>只允许数字字符,并不会让用户input一个点(。)不止一次。 问题是,如果文本框中的文本被选中,用户打算用点来覆盖内容,因此允许! 问题是,你怎么能告诉JavaScript在文本框中的文本是否被选中。

谢谢

以下内容将告诉您是否在所有主要浏览器的文本input中select了所有文本。

例如: http : //www.jsfiddle.net/9Q23E/

码:

 function isTextSelected(input) { if (typeof input.selectionStart == "number") { return input.selectionStart == 0 && input.selectionEnd == input.value.length; } else if (typeof document.selection != "undefined") { input.focus(); return document.selection.createRange().text == input.value; } } 

通过检查onchange事件中的值,您可以轻松地爬上数字点和select的墙。

HTML:

 <input type="text" onchange="ValidateNumericValue(this);" /> 

JS:

 function ValidateNumericValue(oInput) { var blnRequired = true; //set to false if allowing empty value var sValue = oInput.value; if (blnRequired && sValue.length == 0) { alert("Please enter a value"); oInput.focus(); return; } var numericValue = parseFloat(sValue); if (isNaN(numericValue)) { alert("Value is not a valid number"); oInput.focus(); return; } //put back to make 2.15A back to 2.15 oInput.value = numericValue + ""; } 

这将检查改变的值(和用户去不同的元素),当无效将警报和设置焦点回来。

现场testing案例: http : //jsfiddle.net/yahavbr/NFhay/

对于任何需要代码来获取文本框中所选文本的人,这里是一个增强版本:

http://jsfiddle.net/9Q23E/527/

 function getSelection(textbox) { var selectedText = null; var activeElement = document.activeElement; // all browsers (including IE9 and up), except IE before version 9 if(window.getSelection && activeElement && (activeElement.tagName.toLowerCase() == "textarea" || (activeElement.tagName.toLowerCase() == "input" && activeElement.type.toLowerCase() == "text")) && activeElement === textbox) { var startIndex = textbox.selectionStart; var endIndex = textbox.selectionEnd; if(endIndex - startIndex > 0) { var text = textbox.value; selectedText = text.substring(textbox.selectionStart, textbox.selectionEnd); } } else if (document.selection && document.selection.type == "Text" && document.selection.createRange) // All Internet Explorer { var range = document.selection.createRange(); selectedText = range.text; } return selectedText; } 

您可以使用以下代码获取页面中所选元素的ID:

 elem_offset = document.getSelection().anchorOffset; elem = document.getSelection().anchorNode.childNodes[elem_offset]; alert(elem.id); 

2017具体答案 – 最近面临同样的问题。

我们允许用户一次只input3位数字。 当用户尝试input第四个字符时,我们返回false。

当用户select并试图覆盖这些值时,这成为一个问题。

从Tim的回答中得到一个提示。 我明白我想看看selection value是否与input's value相同。

在现代浏览器中,我通过这样做来实现它:

 document.getSelection.toString() === input.value 

希望这有助于某人。