当用户在文本框中时,防止javascript keyup函数效果

preventing javascript keyup function effect when the user is in a text box?

本文关键字:javascript 防止 keyup 函数 用户 文本      更新时间:2023-09-26

目前我使用以下代码允许用户"浏览"我的web应用程序上的内容:

$(this).keyup(function(e) {
    if(e.which == 37) {
        document.location = $("#prev_button").attr('href');
    }else if(e.which == 39) {
      document.location = $("#next_button").attr('href');
    }
});

问题是,如果用户在页面顶部的搜索表单中,我不希望箭头键重定向页面(相反,它们应该在没有功能的情况下正常工作,即允许文本光标在文本中移动)。

表单id是"searchForm"-如果选择了搜索表单,我可以在if语句中添加一个子句,该子句的计算结果为false吗?

您可以在文本框中停止事件的传播,这样事件就不会到达您的另一个处理程序:

$('#searchbox').keyup(function(e) {
    e.stopPropagation();
});

我会使用类似的东西:Demo

$(this).keyup(function(e) {
    if(~['input', 'textarea'].indexOf(e.target.tagName.toLowerCase())) return;
    if(e.which == 37) {
        document.location = $("#prev_button").attr('href');
    }else if(e.which == 39) {
        document.location = $("#next_button").attr('href');
    }
});

通过这种方式,可以排除所有<input><textarea>元素。

IMO,仅排除#searchbox不是一个好的解决方案,因为将来您可能会更改其id或包含其他文本字段,但忘记了必须在排除脚本中反映更改。

查看此线程:)查找当前是否选择了文本框

function checkFocus() {
  if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") {
  //Something's selected
  return true;
 }
}