Javascript 如何知道文本框中的文本是否被选中?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5001608/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to know if the text in a textbox is selected?
提问by Jimbo
I have text boxes <input type='text'>
that only allow numeric characters and wont let the user enter a dot (.) more than once. Problem is, if the text in the text box is selected, the user intends to overwrite the contents with a dot, hence making it allowed! The question is, how can you tell in javascript whether the text in that text box is selected or not.
我有<input type='text'>
只允许数字字符的文本框,并且不会让用户多次输入点 (.)。问题是,如果文本框中的文本被选中,用户打算用点覆盖内容,因此允许!问题是,如何在 javascript 中判断该文本框中的文本是否被选中。
Thanks
谢谢
回答by Tim Down
The following will tell you whether or not all of the text is selected within a text input in all major browsers.
下面将告诉您是否在所有主要浏览器的文本输入中选择了所有文本。
Example: http://www.jsfiddle.net/9Q23E/
示例:http: //www.jsfiddle.net/9Q23E/
Code:
代码:
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;
}
}
回答by Sunny R Gupta
2017 Specific Answer- Faced the same issue recently.
2017 年具体答案- 最近面临同样的问题。
We were allowing users to enter only 3 digits at a time. When the user tried to enter the fourth character we returned false.
我们只允许用户一次输入 3 位数字。当用户尝试输入第四个字符时,我们返回 false。
This became an issue when the user had a selection and was trying to overwrite the values.
当用户有选择并试图覆盖值时,这成为一个问题。
Taking a hint from Tim's answer. I understood that I wanted to see if the selection value
was same as the input's value
.
从蒂姆的回答中得到提示。我明白我想看看它是否selection value
与input's value
.
In modern browsers I achieved it by doing:
在现代浏览器中,我通过以下方式实现了它:
document.getSelection().toString() === input.value // edited
Hope this helps someone.
希望这可以帮助某人。
回答by Mr_CSharp
For anyone who needs the code to get at the selected text within a textbox, here's an enhanced version:
对于需要代码来获取文本框中选定文本的任何人,这是一个增强版本:
http://jsfiddle.net/9Q23E/527/
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;
}
回答by Shadow Wizard is Ear For You
Instead of hitting the wall of digits dots and selections you can climb it easily by checking the value in onchange
event.
您可以通过检查onchange
事件中的值轻松攀爬数字点和选择的墙壁,而不是碰到数字点和选择的墙壁。
HTML:
HTML:
<input type="text" onchange="ValidateNumericValue(this);" />
JS:
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 + "";
}
This will check the value when changed (and user go to different element) and when not valid will alert and set focus back.
这将在更改时检查值(并且用户转到不同的元素),当无效时将发出警报并将焦点设置回来。
Live test case: http://jsfiddle.net/yahavbr/NFhay/
现场测试用例:http: //jsfiddle.net/yahavbr/NFhay/
回答by Raposo
You can get the id of the selected element in the page with the following code:
您可以使用以下代码获取页面中所选元素的 id:
elem_offset = document.getSelection().anchorOffset;
elem = document.getSelection().anchorNode.childNodes[elem_offset];
alert(elem.id);