使用jQuery选择器和setSelectionRange不是函数

o2g1uqev  于 2023-10-17  发布在  jQuery
关注(0)|答案(5)|浏览(135)

我在下面组装了一个基本的jfiddle。出于某种原因,我的选择器可以检索textarea框来设置值,但选择器不能使用setSelectionRange函数。在控制台上,你会发现一个错误。setSelectionRange不是一个函数。
http://jsfiddle.net/dMdHQ/6/
代码(请参考jfiddle):selector.setSelectionRange(carat,carat);

ux6nzvsh

ux6nzvsh1#

setSelectionRange(carat,carat)不是jquery对象上的方法。你想在DOM元素上使用它。试着:

selector[0].setSelectionRange(carat,carat); //use `[0]` or .get(0) on the jquery object

参见Reference

Fiddle

w7t8yxp5

w7t8yxp52#

对我来说这是一个很好的解决方案

selector[0].setSelectionRange(start ,end);

但我想补充一点。我注意到setSelectionRange是在元素获得焦点后异步可用的。

var element = selector[0];
element.addEventListener('focus', function() {
   element.setSelectionRange(start, end); 
});
element.focus();

你也可以选择使用:

element.selectionStart = start;
element.selectionEnd = end;
uqzxnwby

uqzxnwby3#

超文本标记语言:

<input type="search" value="Potato Pancakes" id="search">

JQUERY:

jQuery.fn.putCursorAtEnd = function() {

  return this.each(function() {

    $(this).focus()

    // If this function exists...
    if (this.setSelectionRange) {
      // ... then use it (Doesn't work in IE)

      // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.
      var len = $(this).val().length * 2;

      this.setSelectionRange(len, len);

    } else {
    // ... otherwise replace the contents with itself
    // (Doesn't work in Google Chrome)

      $(this).val($(this).val());

    }

    // Scroll to the bottom, in case we're in a tall textarea
    // (Necessary for Firefox and Google Chrome)
    this.scrollTop = 999999;

  });

};

$("#search").putCursorAtEnd();

检查:
http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

wyyhbhjk

wyyhbhjk4#

你可以试试这个,这个对我很有效。我用它来建立一个地址从单独的地址字段,然后做复制粘贴。

HTML

<div id="d_clip_container" style="position:relative">
    (<a href="#" id="d_clip_button">copy to clipboard</a>)
</div>;
<textarea id="clip" rows="0" cols="0" style="border:none;height:0;width:0;"></textarea>

jQuery

$(document).ready(function() {

        $('#d_clip_button').click(function() {
            //get all the values of needed elements
            var fName = $("#firstName").val();
            var lName = $("#lastName").val();
            var address = $("#Address").val();
            var city = $("#City").val();
            var state = $("#State").val();
            var zip = $("#Zip").val();
            //concatenate and set "clip" field with needed content
            $('#clip').val(fName + " " + lName + "\n" + address + "\n" + city + ", " + state + " " + zip);

            //Do it
            if(copyToClipboard('#clip')) {
                alert('text copied');
            } else {
                alert('copy failed');
            }
        });
    });

    function copyToClipboard(elem) {
        // set focus to hidden element and select the content
        $(elem).focus();
        // select all the text therein  
        $(elem).select();

        var succeed;
        try {
            succeed = document.execCommand("copy");
        } catch(e) {
            succeed = false;
        }

        // clear temporary content
        $(target).val('');

        return succeed;
    }
ilmyapht

ilmyapht5#

element[0].setSelectionRange(99999,99999);
element[0].focus();

这会将焦点设置为最后一个值字符。如果我们不知道它的价值,它就很有用。
文件:

选择开始

第一个选定字符的从0开始的索引。大于元素值长度的索引被视为指向值的末尾。

selectionEnd

最后一个选定字符之后的字符的从0开始的索引。大于元素值长度的索引被视为指向值的末尾。

相关问题