1

id="get" の入力フィールドのカーソルの位置を、id="no" の別の入力フィールドの指定された値に設定したいと考えています。id="no" で入力フィールドに値を入力すると機能しますが、id="get" で入力フィールドに値を入力すると機能しません (サファリのみ)。IE/Firefox/Opera ではすべて動作します。マスター、理由は何ですか?? これは私のコードです:

<script>
function setCaretPosition(ctrl, pos) {
    if(ctrl.setSelectionRange) {
        setTimeout(function(){ctrl.focus();},1);
        ctrl.setSelectionRange(pos,pos);
    }
}
function process1() {
    var no = document.getElementById('no').value;
    setCaretPosition(document.getElementById('get'), no);
}
function process2(v) {
    var no = document.getElementById('no').value;
    setCaretPosition(v, no);
    //setCaretPosition(document.getElementById('get'), no);
}
</script>       
<input size="150" id="get" oninput="process2(this);" value="Please write some integer in the textbox given below and press Set Position button." /><br>
Enter Caret Position: <input oninput='process1();' value="3" id="no" size="1" type="text">
4

1 に答える 1

1

現時点では Safari でテストできませんが、とにかく onblur または focusout イベントにバインドする方がよいと思います。現時点では、2 番目のフィールドを編集するときにキャレットの位置を設定しようとしています。

onblur='g.process3("get");'

g.process3 = function(v) {

    var no = document.getElementById('no').value;
    var el = document.getElementById(v);
    el.focus();
    g.setCaretPosition(document.getElementById(v), no);
}

デモ: http://jsfiddle.net/beshur/uFat/

于 2013-10-25T18:52:07.763 に答える