【问题标题】:setTimeout and e.preventDefaultsetTimeout 和 e.preventDefault
【发布时间】:2015-10-19 12:51:08
【问题描述】:

我有两个事件监听一个独特的字段:自动完成和 onPaste。 我的目标是在粘贴时调用另一个逻辑,并在输入时使用自动完成功能。

我是通过以下方式做到的:

$("#refno").on('paste', function (e) { 
    setTimeout(function () {
        //some logic here
    }, 0);
    e.preventDefault();
})

function quickSearch(fieldName) {
    //some other logic here
} 

quickSearch('.open-invoices-quick-search');

问题在于 e.preventDefault();被调用或太早(阻止代码从 setTimeout),或太晚,允许执行 quickSearch 函数。

知道如何处理这种情况吗?

这里是 JSFddle:https://jsfiddle.net/mk242zkz/1/

无法测试,因为我找不到自动完成库。

【问题讨论】:

  • 可以提供jsfiddle或者plunkr吗?
  • preventDefault() 不会停止setTimeout() 调用。逻辑一定有由其他原因引起的问题。
  • 为什么 0 超时?仅仅在事件监听器中执行你的逻辑并防止事件冒泡 event.cancelBubble = true; 不会更好。 ?
  • 你的 quicksearch() 方法在做什么?任何异步请求?您必须提供有关您的问题的更多背景信息,并在其背后分享最少的“逻辑”

标签: jquery ajax preventdefault quick-search onpaste


【解决方案1】:

您可以改用这种逻辑,但风格模糊恕我直言,您的预期行为是什么...

$("#refno").on('paste', function () {
    $(this).autocomplete("disable").one('keydown', function () {
        $(this).autocomplete("enable");
    });    
});

-jsFiddle-

【讨论】:

    【解决方案2】:

    JqueryUI 自动完成提供了一些常用方法,您可以在初始化期间和初始化后调用自动完成元素。

    我确定您已经看过它,但请查看此处的 API 文档以了解自动完成功能: Autocomplete Docs

    在您的粘贴事件中,尝试在您的自动完成对象上使用 disable 方法。 之后别忘了重新启用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      相关资源
      最近更新 更多