JavaScript -> 快捷键 -> 禁用输入字段

3

好的,我已经让热键生效了,但是无法让它停止

   $(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,使用“registerform”作为ID也不起作用:/
这是由AJAX引起的吗?还是我漏掉了什么?
(抱歉我重新发布了这个问题,只是创建了一个新帐户,找不到我的旧问题> . <)
2个回答

4
我了解,由于将事件监听器附加到文档对象上,所有接受输入的元素,例如文本字段、选择等,都会处理热键,因此失去其正常行为。
请查看第44行jquery.hotkeys插件中。它在初始化时排除了所有接受输入的元素。
附注:也许这个插件作为整体对您的任务有用。
关键是要检查事件是否来自接受文本的输入。
# 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;
}

根据您现在的代码,您需要将此片段插入到绑定到keypress事件的匿名函数开头。


那么你的建议究竟是什么呢?删除我已经有的代码,使用jquery.hotkeys吗?那么我应该如何正确地配置它呢?抱歉,JavaScript对我来说还比较陌生。 - undefined
是的,我建议你去了解一下jquery.hotkeys.js。你可以在github上查看该项目的主页-它有一个简短的自述文件,其中包含示例(还有更多示例在项目本身中)。 - undefined
现在我有的脚本是我完全理解的,重定向也完美地工作,只是希望在文本字段/输入字段中“停用”它。当我看到用jQuery脚本来实现这个功能时,我完全迷失了方向,甚至不知道从哪里开始。 - undefined
@Sjaak,我理解你的担忧,但是这个热键插件只有81行代码 - 它并不复杂,而且是经过验证的,可能比一些重新发明的解决方案更可靠。 - undefined
@Sjaak,一切都好。我无法给出比项目提供的更好的示例。如果你觉得它有点困难,也许可以退后一步,花点时间学习一下 JavaScript。我相信这不会浪费时间。祝好运。 - undefined
显示剩余4条评论

0

看起来运行得很顺利:)

例子: 第一个例子: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="registerform bgcolor2",第三,我在包含输入的页面中没有任何JavaScript代码,我将JavaScript代码放在另一个文件中,并通过<script =..."></script>命令来获取它。 - undefined
1
您可以将警告更换为任何您想要的内容...我不认为这是一个问题。至于类别,它具有registerform,所以它会选取它,您可以添加第二个选择器(我会在我的答案中修改),至于不把它放在同一个文件中,您可以使用一个实时事件,我也会在我的答案中更新。这些都是jQuery和javascript甚至编程的相当基本的用法。我真的认为您应该去阅读文档,这不是一个教程网站,而是一个技术帮助网站。 - undefined
现在这样做是否符合您的要求? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接