【问题标题】:How to prevent jquery event firing on a drop down list given an event is attached给定事件已附加,如何防止在下拉列表上触发 jquery 事件
【发布时间】:2010-11-23 15:42:09
【问题描述】:

我的网页上有一个下拉列表,其中包含一个附加到更改事件的 jquery 事件。在更改时,我使用 ajax 在弹出窗口中加载部分视图。

当用户使用键盘浏览项目列表但随后单击页面另一部分上的链接时,我会立即看到我的弹出窗口。这显然是发生的,因为当用户单击页面上其他位置的链接时,首先在下拉菜单上触发更改事件。

是否有任何巧妙的解决方案来解决这个问题?一个简单的解决方案是在 keyup 上触发事件,但我不希望此功能发生。

这是代码的更改事件sn-p

$('#lookup').change(function()
{
    $.get(..//load template

【问题讨论】:

    标签: jquery asp.net-mvc jquery-ui onchange


    【解决方案1】:

    如果它是一个 ajax 调用,则您的 ajax 调用有可能被缓存。确保您正在禁用缓存。类似“缓存:假”

    【讨论】:

    • 我不明白这与问题有何关系。
    【解决方案2】:

    无法停止该事件,因为无论如何都会触发更改事件。

    一种可能是在事件触发和 $.get 方法的实际调用之间设置一定的超时时间,以便将您的情况考虑在内,但这肯定不是一个优雅的解决方案。

    否则,只有在某个其他元素获得焦点时(例如,如果有一个文本框,在您的下拉列表之后),您才可以调用返回函数。

    我不会太在意它,因为您的弹出窗口似乎必须在下拉更改时显示。如果不是很重要,您可能会在下拉菜单的右侧有一个帮助按钮,单击按钮会弹出您的窗口。

    【讨论】:

      【解决方案3】:

      我对你的问题有点困惑。但是假设“更改”不是真正的更改,我认为您可以为“lastSelected”保留一个变量,并在发生更改时对其进行检查。如果相同,请忽略它。如果不同,请触发您的 Ajax 请求并更新“lastSelected”的值。

      【讨论】:

        【解决方案4】:

        没有找到我喜欢的解决方案或以我的风格干净利落的解决方案,因此决定同时触发“更改”和“按键”事件以避免这种情况。

        【讨论】:

          猜你喜欢
          • 2014-09-17
          • 1970-01-01
          • 1970-01-01
          • 2016-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-08
          • 1970-01-01
          相关资源
          最近更新 更多