jquery setSelectionRange 移动 光标 , 但 不 选择

7z5jn7bk  于 2022-11-22  发布在  jQuery
关注(0)|答案(1)|浏览(174)

我做了一个jsFiddle!
http://jsfiddle.net/31mts93v/
我想创建一个输入框,其功能如下:当您按左箭头键和右箭头键时,它会根据光标所在的位置选择(就像鼠标选择一样)上一个单词或下一个单词。
首先,我需要能够在你按下左箭头键时动态地选择文本的一部分,尽管它看起来只是移动了光标,没有选择任何内容,就像上面的jsFiddle一样。
HTML为:
<input type='text' id='humantext' class='form-control' value='foo bar and bar bar foo, a bar fooey foo foo bar' />
JS是:

$(document).ready(function () {

function createSelection(start, end) {
    var field = document.getElementById('humantext');
    console.log(start + ' ' + end);
    if( field.createTextRange ) {
        console.log('createtextrange');
        var selRange = field.createTextRange();
        selRange.collapse(true);
        selRange.moveStart('character', start);
        selRange.moveEnd('character', end);
        selRange.select();
    } else if( field.setSelectionRange ) {
        console.log('setSelectionRange');
        field.focus();
        field.setSelectionRange(2, 7);
    } else if( field.selectionStart ) {
        console.log('selectionStart');
        field.selectionStart = start;
        field.selectionEnd = end;
    }
    field.focus();
}     

$("#humantext").keydown(function (e) {
    var words = $(this).val().split(' ');
    if (e.keyCode == 37) {
        // Left Arrow
        createSelection(0,5);
    }
    if (e.keyCode == 38) {
        // Right Arrow
        createSelection(10,20);

    }
});
});

第二次编辑经过一个上午,我终于做到了。我最大的障碍是当按下箭头键时无法防止默认设置。下面是jsfiddle:http://jsfiddle.net/31mts93v/3/

iyr7buue

iyr7buue1#

需要做的三件事:

  • event.preventDefault()相加
  • 使用开始和结束变量,而不是硬编码的2和7
  • 右箭头键代码为39

完整代码:

$(document).ready(function () {

function createSelection(start, end) {
    var field = document.getElementById('humantext');
    console.log(start + ' ' + end);
    if( field.createTextRange ) {
        console.log('createtextrange');
        var selRange = field.createTextRange();
        selRange.collapse(true);
        selRange.moveStart('character', start);
        selRange.moveEnd('character', end);
        selRange.select();
    } else if( field.setSelectionRange ) {
        console.log('setSelectionRange');
        field.focus();
        field.setSelectionRange(start, end);
    } else if( field.selectionStart ) {
        console.log('selectionStart');
        field.selectionStart = start;
        field.selectionEnd = end;
    }
    field.focus();
}     

$("#humantext").keydown(function (e) {
    e.preventDefault()
    var words = $(this).val().split(' ');
    if (e.keyCode == 37) {
        // Left Arrow
        createSelection(0,5);
    }
    if (e.keyCode == 39) {
        // Right Arrow
        createSelection(10,20);

    }
});
});

http://jsfiddle.net/omahlama/pszwmomk/1/

相关问题