-1

简单地说,我有一个 js 脚本,可以用左右箭头更改页面,但是如果选择了特定的 textarea,如何停止呢?

这是我改变页面的js

$(document).keydown(function(event) {

    if(event.keyCode === 37) {
          window.location = "http://site.com/pics/5";
    }    
    else if(event.keyCode === 39) {
          window.location = "http://site.com/pics/7";
    }
});
4

4 回答 4

2
$('textarea').on('keypress', function(evt) {
  if ((evt.keyCode === 37) || (evt.keyCode === 39)) {
     console.log('stop propagation');
     evt.stopPropagation();
  }
});

参见示例小提琴:http: //jsfiddle.net/GUDqV/1

更新:在 OP 澄清之后,这甚至适用于 Chrome 上的 jQuery 1.2.6:http: //jsfiddle.net/GUDqV/2/

$('textarea').bind('keyup', function(evt) {
  if ((evt.keyCode === 37) || (evt.keyCode === 39)) {
     console.log('stop propagation');
     evt.stopPropagation();
  } 
});​

在 Chrome 和 jQ1.2.6 上查看此代码的屏幕截图Chrome 和 jQ1.2.6 上的最新代码

于 2012-04-27T08:17:09.727 回答
0

您可以通过执行以下操作来检查 textarea 是否处于焦点:

if (document.activeElement == myTextArea) {
  // Don't change the page
}
于 2012-04-27T08:13:18.890 回答
0

$("#mytextarea").is(":focus")这会让你知道元素是否聚焦。也$(document.activeElement)将获得当前聚焦的元素。您可以检查您的文本区域是否聚焦,并禁用使用左右箭头键时导航的脚本。显示您尝试过的内容的一点代码可能会带来更具体的响应。希望这可以帮助。

于 2012-04-27T08:17:05.850 回答
0

可能最简单的方法是考虑event.target到您的代码,检查它是否是文本区域:

$(document).keydown(function(event) {
    if (event.target.id == "myTextArea") {
        return true;
    }
    else if(event.keyCode === 37) {
        window.location = "http://site.com/pics/5";
    }    
    else if(event.keyCode === 39) {
        window.location = "http://site.com/pics/7";
    }
});

任何源自textareaid 为myTextArea的元素的键事件都将被忽略。

于 2012-04-27T10:47:13.353 回答