jQuery - 从文本区域中选择所有文本

IT技术 javascript jquery forms textarea selection
2021-03-08 05:35:20

当您在 textarea 内单击时,如何使其全部内容被选中?

最终当您再次单击时,取消选择它。

6个回答

为了防止用户在每次尝试使用鼠标移动插入符号时选择整个文本时感到恼火,您应该使用focus事件而不是click事件来执行此操作以下将完成这项工作并解决 Chrome 中阻止最简单版本(即仅select()focus事件处理程序中调用 textarea 的方法)工作的问题。

jsFiddle:http : //jsfiddle.net/NM62A/

代码:

<textarea id="foo">Some text</textarea>

<script type="text/javascript">
    var textBox = document.getElementById("foo");
    textBox.onfocus = function() {
        textBox.select();

        // Work around Chrome's little problem
        textBox.onmouseup = function() {
            // Prevent further mouseup intervention
            textBox.onmouseup = null;
            return false;
        };
    };
</script>

jQuery 版本:

$("#foo").focus(function() {
    var $this = $(this);
    $this.select();

    // Work around Chrome's little problem
    $this.mouseup(function() {
        // Prevent further mouseup intervention
        $this.unbind("mouseup");
        return false;
    });
});
我认为最好使用单独的“选择所有文本”按钮来实现这些东西,因为自动选择焦点或点击事件上的文本真的很烦人。
2021-04-15 05:35:20
@zack:此答案中的 jsFiddle 示例在 Chrome 中对我有用。不适合你吗?我同意您链接的答案更万无一失。
2021-04-15 05:35:20
这对我来说在 Chrome 中失败了,工作解决方案是:stackoverflow.com/a/6201757/126600
2021-04-16 05:35:20
稍微改变上面的代码,它会像一个魅力一样工作.. $("#foo").mouseup(function() { $("#foo").unbind("mouseup"); return false; }); 你需要引用文本框而不使用this只引用它的完整路径..它会工作..
2021-05-03 05:35:20
@TimDown:你说得对,我有点过于热心了——实际上它在“点击”时可以正常工作,但如果你tab进入文本区域就会失败——你的其他解决方案适用于这两种情况:)
2021-05-11 05:35:20

更好的方法,解决 tab 和 chrome 问题以及新的 jquery 方法

$("#element").on("focus keyup", function(e){

        var keycode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
        if(keycode === 9 || !keycode){
            // Hacemos select
            var $this = $(this);
            $this.select();

            // Para Chrome's que da problema
            $this.on("mouseup", function() {
                // Unbindeamos el mouseup
                $this.off("mouseup");
                return false;
            });
        }
    });

我最终使用了这个:

$('.selectAll').toggle(function() {
  $(this).select();
}, function() {
  $(this).unselect();
});
不,这个特定的文本区域仅用于复制粘贴。我里面的所有文本都是一个大的加密字符串,只能完全替换或复制到剪贴板
2021-04-17 05:35:20
@Alex:如果我是你,我不会把它搞得太糟。用户期望 textarea 的标准行为。
2021-04-26 05:35:20
@Hollister:不,用户或脚本完全有可能选择 div 中的内容。您可能正在考虑复制到剪贴板,如果没有像 ZeroClipboard 这样的基于 Flash 的库,这在脚本中是不可能的。
2021-04-28 05:35:20
但我不知道如何检查文本是否已被选中,因此我可以撤消这两个操作:(
2021-05-04 05:35:20
@Alex:啊,对了。您可能希望通过添加readonly属性使其成为只读
2021-05-15 05:35:20
$('textarea').focus(function() {
    this.select();
}).mouseup(function() {
    return false;
});

稍微短一点的 jQuery 版本:

$('your-element').focus(function(e) {
  e.target.select();
  jQuery(e.target).one('mouseup', function(e) {
    e.preventDefault();
  });
});

它可以正确处理 Chrome 角落案例。有关示例,请参见http://jsfiddle.net/Ztyx/XMkwm/

您好,我测试了您的代码,并且可以正常工作。目前,在我的情况下,我在我的 中使用disabled属性<textarea disabled>test</textarea>,但它不起作用,那么如何修复它?
2021-05-11 05:35:20