如何知道文本框中的文本是否被选中?
我有文本框<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
希望这有助于某人。