I'm trying to programmatically select a substring of text inside of an input text box. I found an example here but there's only one problem. It doesn't work! I tried it on FF4, the latest build of Chrome and IE. I haven't tried Opera but if it's not working on those 3 it's not a good enough solution.
I also searched on setSelectionRange to see if it's deprecated but I couldn't find anything to lead me to believe that it was.
Here's my code that I'm trying to implement this in:
_defShowTimeUnitFn: function(e) {
if(!this.isValidInput()) {
var inputNode = this._inputNode,
input = inputNode.get(VALUE),
newText;
newText = Y.Lang.trim(input) + ' ' + SHOW_TIMEUNIT_DEFAULT;
inputNode.set(VALUE, newText);
if (inputNode.setSelectionRange) {
// Mozilla
inputNode.setSelectionRange(0, 1);
} else if (inputNode.createTextRange) {
// IE
var range = inputNode.createTextRange();
range.collapse(true);
range.moveEnd('character', 1);
range.moveStart('character', 1);
range.select();
} else if (inputNode.selectionStart) {
inputNode.selectionStart = 0;
inputNode.selectionEnd = 1;
}
inputNode.focus();
}
},
Does anybody know the commands to accomplish
textbox.setSelectionRange(start,end);
in a modern browser?
setSelectionRange()
works on all major browsers except IE <= 8. Since get()
and set()
are not standard methods of DOM elements, I'm pretty sure inputNode
is not a reference to an actual <input>
element. I imagine it's a YUI wrapper object around an <input>
element. You need to call setSelectionRange()
on the input itself rather than the YUI wrapper object.