-1

重複の可能性:
テキストボックスのオンフォーカスでカーソルを14の長さに設定します

テキストボックスで特定の長さの部分文字列を選択することに焦点を当てるコードがあります。文字列全体を選択するのではなく、カーソルを配置したい。コードは以下の通りです

<script type="text/javascript">
window.onload = function() {
    $("#message").keyup(function(e){
        var message = document.getElementById('message');
        // Select a portion of text
        createSelection(message, 0, 5);

        // get the selected portion of text
        var selectedText = message.value.substring(message.selectionStart, message.selectionEnd);
        alert(selectedText);
    });
    function createSelection(field, start, end) {
    if( field.createTextRange ) {
        var selRange = field.createTextRange();
        selRange.collapse(true);
        selRange.moveStart('character', start);
        selRange.moveEnd('character', end-start);
        selRange.select();
    } else if( field.setSelectionRange ) {
        field.setSelectionRange(start, end);
    } else if( field.selectionStart ) {
        field.selectionStart = start;
        field.selectionEnd = end;
    }
    field.focus();
    }}

</script>

コードの HTML 部分

<input type="text" name="message" id="message" value="" />
4

3 に答える 3

1

このトピックの回答に基づいて、単純な jQuery プラグイン関数を作成しました。

$.fn.setCursorPos = function(position) {
    return this.each(function() {
        var node = this;

        node.focus();

        if (node.setSelectionRange) {
            node.setSelectionRange(position, position);
        } else if (node.createTextRange) {
            var textRange = node.createTextRange();
            textRange.collapse(true);
            textRange.move('character', position);
            textRange.select();
        }
        node.selectionStart = position;
    });
};

jsFiddleのデモ。

于 2012-10-11T09:10:36.370 に答える
0

@My_Boon のアイデアを見て、自分のコードを変更しました。2つのパラメーターを変更しただけで、ここに新しい答えがあります。私はちょうど変更しました

else if( field.setSelectionRange ) {
        field.setSelectionRange(end, end);
    } else if( field.selectionStart ) {
        field.selectionStart = end;
        field.selectionEnd = end;
    }

field.setSelectionRange(end, end); this line was `field.setSelectionRange(start, end);`
于 2012-10-11T09:14:01.620 に答える
0

setCursor 関数を定義できます。

function setCursor(node,pos){

    var node = (typeof node == "string" || node instanceof String) ? document.getElementById(node) : node;

    if(!node)
        return false;
    else if(node.createTextRange)
    {
        var textRange = node.createTextRange();

        textRange.collapse(true);
        textRange.moveEnd(pos);
        textRange.moveStart(pos);
        textRange.select();
        return true;
    }
    else if(node.setSelectionRange)
    {
        node.setSelectionRange(pos,pos);
        return true;
    }

    return false;
}

スクリプトでの使用:

field.focus(function(){
   var done = setCursor(message, 3);
   // you can check the done boolean if you want ...
});

ソース

于 2012-10-11T07:52:38.057 に答える