i'm having a textbox where i need to set focus/ cursor at required index of the textbox in opera browser.
A:
function SetCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
elemId: id of the element
caretPos: position of the cursor
rahul
2009-09-16 09:05:54
caretPos = 8, but in FF, the cursor is at the beginning of the textbox
Natrium
2009-09-16 09:12:50
same code i'm using in opera but its going to beginning
santose
2009-09-16 13:45:52
A:
Hi phoenix, ur code works fine, but getting clash in opera.
becoz the following code snippet
if(elem.createTextRange) {
is also true to opera, but createTextRange 'll only supported by IE.
So i have changed little modification in ur code
function SetCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if (elem != null) {
if ($.browser.msie) {
if (elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
}
else {
if (elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
santose
2009-09-17 09:56:28
If you reverse the detection and look for elem.selectionStart first you don't need to use browser detection - always best practise :)
hallvors
2009-10-06 16:58:18
(And Opera has limited support for createTextRange() and the rest of the IE selection API. We'll remove it again because it's incomplete - it's basically my fault for thinking all those years ago that the subset of functionality I wrote tests for was sufficient..)
hallvors
2009-10-06 16:59:50