我在$.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']
答案 0 :(得分:2)
在某些浏览器中,当有问题的输入失去焦点时,更改事件(仅?)会触发 - 这就是当您单击页面上的其他位置时,您正在看到另一个帖子的原因。有关详细信息,请参阅this question - 它与单选按钮有关,但更改/非聚焦行为类似。
至于为什么文本框绑定到更改事件::hidden
选择器执行a few more things而不仅仅选择隐藏类型的输入。在这种情况下,当脚本运行时,页面上看不到文本输入,因此它也被选中(因为它被隐藏了!)。
如果你只想选择“真正的”隐藏输入,你会想要一些更丑陋的选择器$('#theForm input[type=hidden]')
。
希望这有帮助!
PS:使用JS won't trigger the change event更改输入的值。由于隐藏类型的输入大概只能通过JS进行 更改,因此您可以从更改隐藏值的任何地方调用$('#theForm').submit()
。