【问题标题】:Javascript -> Hotkeys -> Disable for input fieldsJavascript -> 热键 -> 禁用输入字段
【发布时间】:2011-10-24 21:10:23
【问题描述】:

好的,所以我的热键工作无法停止

   $(document).keypress(function(e){

       if(e.which == 13){
      //Enter key is press do what you want
   }
   else if(e.which == 67 || e.which == 99){
      //C key is press do what you want

      window.location.href = "/html/credits.php";

   }
    else if(e.which == 32){
        alert("Space pressed");

    }

    });

     $("input.registerform").keypress(function(e){

     e.stopPropagation(); });

这是我必须让它停下来的,我的输入表单的类是“registerform bgcolor2”,但它不能与“input.registerform”一起使用,也不能与“input.registerform bgcolor2”一起使用我尝试向它添加一个ID使用注册表作为 ID 也不起作用:/

是不是我的 AJAX 造成的?还是我在这里遗漏了什么?

(对不起,我重新发布了这个只是创建了一个新帐户,无法找到我的旧问题>。

【问题讨论】:

    标签: javascript jquery ajax hotkeys


    【解决方案1】:

    我了解,由于您将事件侦听器附加到文档对象,所有输入接受元素,例如文本字段、选择等,都将处理热键,因此失去它们的正常行为。

    查看jquery.hotkeys 插件中的line 44。它在初始化时排除所有输入接受元素。

    附:也许这个插件整体上对你的任务很有用。

    关键是检查事件是否来自文本接受输入。

    # only bind event to text-accepting elements, if they have been
    # explicitly selected
    # if your event variable happens to be called e, please adjust accordingly
    if ( this !== event.target && 
        ( /textarea|select/i.test( event.target.nodeName ) ||
          event.target.type === "text") ) {
        return;
    }
    

    就你现在的代码而言,你需要在匿名函数的开头插入这个 sn-p,你绑定到 keypress 事件。

    【讨论】:

    • 那么您的建议到底是什么,删除我拥有的代码,使用 jquery.hotkeys?以及我将如何正确配置它,抱歉,javascript 是我相当新的东西。
    • 是的,我建议您查看 jquery.hotkeys.js。看看 github 上的项目主页 - 它有一个简短的 README 和示例(以及项目本身中的更多示例)。
    • 好吧,我现在拥有的脚本是我完全理解的,并且重定向工作完美,只是想在文本字段/输入字段中“停用”它,当我看到 jquery 脚本执行此操作时,我'我完全迷路了,甚至不知道从哪里开始。
    • @Sjaak,我理解您的担忧,但热键插件不超过 81 sloc - 它并不复杂,但它是经过验证且可能比某些重新发明的解决方案更强大的代码 sn-p。
    • 那么您能否就如何使用这个 jquery 热键给出一个大致的指导?我已经有 jquery 1.4.2 我想下载热键,添加它,然后呢?
    【解决方案2】:

    似乎工作得很好:)

    示例: 第一个例子:http://jsfiddle.net/HenryGarle/SG5Um/ 第二个例子:http://jsfiddle.net/HenryGarle/SG5Um/1/

    新代码:

    $(document).keypress(function(e){
    
       if(e.which == 13){
            alert("Enter");
       }
       else if(e.which == 67 || e.which == 99){
            alert("c");
           //window.location = 'whateveryouwant';
       }
        else if(e.which == 32){
            alert("Space pressed");
        }
    
    });
    
    $("input.registerform.bgcolor2").live('keypress', function(e){
        alert("Stopped");
        e.stopPropagation();
    });
    
    Stops:
    <input class="registerform bgcolor2" type="text">
    <br>
    Does not stop:
    <input class="registerform" type="text">
    

    使用只有 registerform 的任何东西都会正常运行,但如果它也有 bgcolor2 它将停止事件。

    【讨论】:

    • 我正在进行重定向而不是警报,其次是我的 class= class="registerform bgcolor2" 并且第三,我在我输入的页面中没有任何 javascript,我有 javascript一个不同的文件,我用 命令检索它
    • 您可以用您想要的任何内容替换警报.. 我不明白这有什么问题。至于课程,它有注册表格,所以它会选择它,你可以添加第二个选择器(我会用它来修改我的答案),至于不在同一个文件中,你可以使用我会的现场活动也在我的答案中更新。这些都是相当基本的用法,不仅是 jQuery,而且是一般的 javascript 和编程。我真的认为你应该去阅读文档,这不是一个教程网站,它是一个技术帮助网站。
    • 现在这是否符合您的要求?
    猜你喜欢
    • 2016-03-20
    • 2018-11-12
    • 2010-12-31
    • 2017-05-19
    • 2012-10-05
    • 2019-01-19
    • 2020-02-04
    相关资源
    最近更新 更多