Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在opera的文本框上的所需索引中设置焦点_Javascript_Jquery_Opera - Fatal编程技术网

Javascript 如何在opera的文本框上的所需索引中设置焦点

Javascript 如何在opera的文本框上的所需索引中设置焦点,javascript,jquery,opera,Javascript,Jquery,Opera,我有一个文本框,需要在文本框的所需索引处设置焦点/光标 在opera浏览器中。 function SetCaretPosition(elemId, caretPos) { var elem = document.getElementById(elemId); if(elem != null) { if(elem.createTextRange) { var range = elem.createTextRange();

我有一个文本框,需要在文本框的所需索引处设置焦点/光标 在opera浏览器中。

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


caretPos:光标的位置可以正常工作,但在opera中会发生冲突

请参阅下面的代码片段

if(elem.createTextRange) {
opera也是如此,但createTextRange仅受IE支持

所以我对你的代码做了一些修改

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();
        }
    }
}

caretPos=8,但在FF中,如果反向检测并查找elem,则光标位于文本框的开头。selectionStart首先不需要使用浏览器检测-始终最佳做法:)(Opera对createTextRange()的支持有限)还有IE selection API的其余部分。我们将再次删除它,因为它不完整——多年前我一直认为我编写的测试功能子集已经足够了,这基本上是我的错