【问题标题】:odd, rare but problematic behavior accessing a jquery UI input autocomplete's value on click of a button奇怪,罕见但有问题的行为在单击按钮时访问 jquery UI 输入自动完成的值
【发布时间】:2012-09-20 18:32:02
【问题描述】:

基本上,我有时很难从带有自动完成功能的 jquery UI 输入中获取正确的值。 Iv 创建了一个 jsfiddle 来演示该行为。很难解释确切的问题,但这是小提琴:

http://jsfiddle.net/B4mXH/14/

要重现,请完全按照以下步骤操作,同时打开浏览器开发工具 js 控制台:

  1. 专注于文本输入
  2. 将鼠标从输入端移开
  3. c 型
  4. 按键盘上的向下箭头选择“abc”
  5. 将鼠标悬停在“cde”选项上
  6. 点击按钮。

错误:我不会得到任何价值。 undefined 被记录到控制台。 预期:输入框中的任何值。请=)

如果重要的话,我正在使用 chrome。

【问题讨论】:

  • 您使用的是什么 jQuery 和 jQuery UI 版本?小提琴中的那些并不真正匹配,请尝试使用 jQuery 1.8.1 和 UI 1.8.23 jsfiddle.net/ult_combo/jyCgr/4
  • 另外,我尝试了多次,但无论是使用 Chrome 21 stable 还是 23 Canary,都无法重现该问题。
  • 我试过你的小提琴,我也遇到了同样的问题。我的铬是最新的。想查看这些步骤,然后再试一次?也许我需要录制视频;)
  • 聚焦,将鼠标移开,c,向下,悬停在cde,点击。已经做了几次了。是的,也许视频可以提供帮助。 :P
  • 这是视频! vimeo.com/49861808 =)

标签: jquery html jquery-ui jquery-autocomplete onchange


【解决方案1】:

如果您将change 处理程序替换为blur 处理程序,它将按预期工作:

$('#autocomplete').blur(function(event, ui) {
    value = $(this).val();
});

我不确定为什么,但我假设 UI 以编程方式触发 change 事件,这些事件会影响您存储的 value 变量的结果。

另外,如果你想始终获取文本输入的当前值,你可以在使用时查询它,而不是将其存储在变量中:

$('#button').click(function() {
    console.log("clicked with : " + $('#autocomplete').val());
});

您的项目可能有一些限制,您不能使用它,但如果您可以使用它,它是最防弹的方法。

【讨论】:

  • 感谢模糊解决方案。不过,我们的问题比替代解决方案要大一些。我们实际上使用了一个自定义 jquery 小部件,它触发一个更改事件来更新一个 knockout.js 绑定。它是我们在点击事件中实际使用的实际 knockout.js 视图模型...
  • 我是这么认为的。没问题。 =]
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2017-06-19
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多