在文本输入的键盘上调用时,单击后重复提交

时间:2011-03-18 21:13:53

标签: javascript jquery

我在$.post的{​​{1}}上发布了keyup的表单, 问题是,在帖子之后,我点击浏览器中的任何地方(甚至在firebug控制台上),input type='text'将重复

直播链接: http://mrgsp.md:8080/awesome/lookupdemo

(点击一个按钮打开一个弹出窗口,在点击某些内容后搜索一个字母,例如'm'[观看firebug控制台])

我的脚本是这样的:

$.post

更新:只是注意到没有$('#theform input:text').keyup(function (e) { var w = e.which; if (w < 9 || w > 45 && w < 91 || w > 93 && w < 112 || w > 185) $('#theform').submit(); }); $('#theform input:hidden').change(function () { $('#theform').submit(); }); $('#theform').submit(function(e){ e.preventDefault(); ... $.post(...); }); 一切都没问题

更新2:显然文本框也会触发更改,奇怪的是我注册了$('#theform input:hidden').change(...的更改而不是input:hidden

更新3:已解决,看起来我应该使用input:text代替input[type='hidden']

1 个答案:

答案 0 :(得分:2)

在某些浏览器中,当有问题的输入失去焦点时,更改事件(仅?)会触发 - 这就是当您单击页面上的其他位置时,您正在看到另一个帖子的原因。有关详细信息,请参阅this question - 它与单选按钮有关,但更改/非聚焦行为类似。

至于为什么文本框绑定到更改事件::hidden选择器执行a few more things而不仅仅选择隐藏类型的输入。在这种情况下,当脚本运行时,页面上看不到文本输入,因此它也被选中(因为它被隐藏了!)。

如果你只想选择“真正的”隐藏输入,你会想要一些更丑陋的选择器$('#theForm input[type=hidden]')

希望这有帮助!

PS:使用JS won't trigger the change event更改输入的值。由于隐藏类型的输入大概只能通过JS进行 更改,因此您可以从更改隐藏值的任何地方调用$('#theForm').submit()