0

我试图阻止输入键触发输入字段上其他脚本的所有操作。

这是我正在使用的代码:

 $(document).bind("keydown", function(e) {

      var code = e.keyCode || e.which; 

          if (code  == 13) {  
          // alert('enter pressed');
          e.preventDefault();
          return false;

      }
 });

运行代码的示例在这里http://jsfiddle.net/8SJYn/,它应该禁用输入,但事实并非如此。

意见?

4

3 回答 3

2

您可以通过关闭由 tagit 单独为该元素创建的输入的 keydown 和 blur 事件来实现。

尝试这个:

$('#myTags + ul .ui-autocomplete-input').off('keydown').off('blur');

http://jsfiddle.net/JzJRY/

于 2013-06-15T04:46:27.227 回答
0

进入 tag-it.js,在第 245 行,找到这部分并将其删除:

event.which === $.ui.keyCode.ENTER
于 2013-06-15T04:28:17.987 回答
0

JavaScript 事件有一个“冒泡”阶段,它们首先在最内层的 DOM 元素上触发,然后一直到达顶级文档。如果您尝试在文档级别停止事件,如您的示例代码中所示,则为时已晚。

在某些浏览器(例如 Firefox)中,在冒泡阶段之前有一个“捕获”阶段,它的工作方向相反:从上到下。您不能使用 jQuery 添加捕获阶段事件处理程序。您必须使用本机addEventListener函数并true作为第三个参数传递。如果您将下面的代码添加到您的 jsfiddle 中,它将阻止某些浏览器中的 Enter keydown 事件。

document.addEventListener('keydown', function (e) {
    if (e.keyCode === 13) {
        // alert('Enter keydown');
        e.stopPropagation();
    }
}, true);

请注意,您的 jsfiddle 中的 tag-it 控件也会在 blur 上执行其文本到标签的转换,因此如果您取消注释上面的警报语句,它仍然会执行其文本到标签的转换,因为 blur 事件显示警报消息时发生。

最后,如果您不仅要阻止其他脚本处理 Enter 按键,还要阻止浏览器本身,e.preventDefault();请在上面添加一行。

于 2013-06-15T05:05:43.580 回答