寻找更好的解决方法,Chrome选择焦点错误

Jen*_*nni 35 javascript jquery webkit

我在这个问题中遇到与用户相同的问题,这是由于Webkit中的这个错误.但是,提供的解决方法不适用于我的应用程序.让我重新陈述问题,这样你就不必去读另一个问题了:

我正在尝试选择textarea中的所有文本,当它获得焦点时.以下jQuery代码适用于IE/FF/Opera:

$('#out').focus(function(){
  $('#out').select();
});
Run Code Online (Sandbox Code Playgroud)

但是,在Chrome/Safari中,文本被选中 - 非常简短 - 但随后会触发mouseUp事件并取消选择文本.以上链接提供了以下解决方法:

$('#out').mouseup(function(e){
  e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

但是,这种解决方法对我没有好处.我想在用户给出textarea焦点时选择所有文本.然后,如果他选择,他必须能够只选择部分文本.任何人都可以想到仍然符合此要求的解决方法吗?

tco*_*ooc 29

这个怎么样?

$('#out').focus(function () {
    $('#out').select().mouseup(function (e) {
        e.preventDefault();
        $(this).unbind("mouseup");
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 可能`.one()`在这里是更好的方法. (9认同)

Adr*_*ine 25

接受的答案(基本上我到目前为止找到的所有其他解决方案)都不适用于键盘焦点,即按Tab键,至少不在我的Chromium 21中.我使用以下代码段:

$('#out').focus(function () {
  $(this).select().one('mouseup', function (e) {
    $(this).off('keyup');
    e.preventDefault();
  }).one('keyup', function () {
    $(this).select().off('mouseup');
  });
});
Run Code Online (Sandbox Code Playgroud)

e.preventDefault()keyupfocus处理程序没有帮助,所以键盘焦点后的取消选择似乎不会发生在他们的默认处理程序中,而是介于focuskeyup事件之间.

正如@BarelyFitz所建议的那样,使用命名空间事件可能会更好,以免意外解除绑定其他事件处理程序.更换'keyup''keyup.selectText''mouseup''mouseup.selectText'了点.

  • 取消绑定事件时,可能会无意中取消绑定可能在输入上的其他处理程序.为了防止这种情况,您可以使用诸如"mouseup.selectText"之类的命名空间而不是"mouseup",然后只删除您的单个事件处理程序. (4认同)