代码之家  ›  专栏  ›  技术社区  ›  David

如何在附加事件的情况下防止在下拉列表上触发jquery事件

  •  3
  • David  · 技术社区  · 14 年前

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

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

    有没有解决这个问题的好办法?一个简单的解决方案是在keyup上触发事件,但我不希望发生这种功能。

    下面是更改事件代码片段

    $('#lookup').change(function()
    {
        $.get(..//load template
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   Jithendra R    14 年前

    如果是ajax调用,则可能会缓存ajax调用。确保禁用缓存。类似“缓存:错误”

        2
  •  0
  •   Mauro    14 年前

    无法停止事件,因为在任何情况下都会触发更改事件。

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

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

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

        3
  •  0
  •   Hal Helms    14 年前

    我对你的问题有点困惑。但假设“change”不是真正的更改,我想您可以为“lastSelected”保留一个变量,当发生更改时,请对照该变量进行检查。如果它是一样的,忽略它。如果不一样,则关闭Ajax请求并更新“lastSelected”的值。

        4
  •  0
  •   David    14 年前

    没有找到一个我喜欢的解决方案,也没有完全按照我的风格工作,所以决定在“change”和“keyup”事件上都触发,以避免出现这种情况。