1

我在 Stack Overflow 上找到了这个问题,并使用了最佳答案中给出的代码。

否则它的效果非常好,但是有一个问题。在我的页面上,我有多个文本区域。事实上,我使用的选择器只是"textarea".

但是,当从一个文本区域“切换”到另一个文本区域时(使用 Tab 键跳转到下一个区域),显然不会触发焦点事件,并且不会选择文本。

如何修改该代码以通过单击和 Tab 来工作?

JSFiddle 这里;http://jsfiddle.net/qQDbZ/ 我在 Chrome 上,当点击 textarea 时会选择全部,tabbing 不会。

4

3 回答 3

5

我能够使用以下解决方法来解决这个问题:

$('textarea').focus(function() {
    var $this = $(this);
    $this.select().mouseup(function() {
        $this.off('mouseup');
        return false;
    });
}).keyup(function(e) {
    if(e.which === 9) {
        this.select();
    }
});

演示:http: //jsfiddle.net/KfFPM/3/

我在 Chrome 21、Safari 6、Firefox 14、Opera 12 和 IE 9 中测试了上述内容。稍后我会测试更多版本;我现在很高兴。向前跳动和向后移动+跳动时工作。

绑定到keydown没有工作。

我仍然认为这种解决方法应该是不必要的。我最好的猜测是 webkit 浏览器将选项卡检测为 textarea 内的按键,因此取消选择文本,就像任何浏览器在 textarea 中选择了一些文本然后开始输入时一样。

于 2012-08-24T18:37:16.703 回答
2
$('input[type="textarea"]').keydown(function(event){
    var keypressed = event.keyCode || event.which,
    tab = 9,
    $this = $(this);

    if(keypressed === tab){
       $this.next('textarea').focus();
    }
});

不确定到底是什么问题,但是如果您需要强制解决方案,这应该可以。

于 2012-05-01T18:15:40.940 回答
0
$('textarea').focus(function() {
    var $this = $(this);
    $this.select();
}).keyup(function(e) {
    if(e.which === 9) {
        this.select();
    }
}).off('mouseup',function(){
    return false;
})
于 2015-04-22T19:11:40.883 回答