【问题标题】:jQuery UI Autocomplete: How to get 'change' event to fire earlier?jQuery UI 自动完成:如何让“更改”事件更早触发?
【发布时间】:2011-06-20 04:20:44
【问题描述】:

http://jqueryui.com/demos/autocomplete/#event-change

听起来change 事件应该在您选择一个项目后触发,但它似乎会触发 onblur,但前提是输入已更改。

selectOTOH 触发太早,它在输入文本更新之前触发。

我想在用户选择项目后或在用户键入内容并切换焦点后立即对输入执行某些操作(如通常的更改事件)。

我该怎么做?

【问题讨论】:

  • 文档声明新选择的值由 ui.item 引用。你能以这种方式获得价值吗?更改项也总是在关闭事件之后触发,这就是您提到的直到 onblur 事件才触发。
  • @Ben:close 事件在 onblur 之前触发。是的,我可以利用ui.item,但是我必须处理两种情况,即用户键入一些内容会导致更改,以及用户选择一个项目的情况不同(必须以不同的方式访问数据)。除非我们作弊......像我一样。但既然你提到了它,数据似乎在 触发关闭事件之前得到更新,所以我也可以在那里触发更改。
  • 有趣的是它说“当列表被隐藏时 - 不必与更改一起发生。”因为这两个事件不会同时触发,即使它们都发生了。
  • 我意识到 close 事件在 onblur 之前触发,我想也许你认为它们是相关的,因为你点击离开这显然会导致两个事件被触发。下面的解决方案很好,很高兴你想通了。
  • @Ben:嗯,是的,我确实认为他们会一个接一个地开火。即,当您单击一个项目时,我希望触发关闭事件,然后立即触发更改事件。但事实并非如此。 close 事件触发,然后 change 事件在您单击其他位置之前不会触发。那好吧。我喜欢活动,但我讨厌你真正想要的活动有空洞。

标签: jquery jquery-ui jquery-ui-autocomplete


【解决方案1】:

没关系,想通了。我们可以作弊:

select: function(event,ui) { 
    this.value=ui.item.value; 
    $(this).trigger('change'); 
    return false; 
}

手动设置input的值,然后手动触发change事件,返回false,这样就不会麻烦设置两次input了。

【讨论】:

  • 你让我免于精神崩溃!谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多