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

Javascript 在文本输入的键控上调用时,在单击后重复提交,javascript,jquery,Javascript,Jquery,我在input type='text'的keyup上发布一个带有$的表单, 问题是,在发布后,我在浏览器中的任何位置(甚至在firebug控制台上)单击$。将重复发布 实时链接: (在搜索字母后,点击按钮打开弹出窗口,例如,点击某个字母后的“m”[观看firebug控制台]) 我的脚本是这样的: $('#theform input:text').keyup(function (e) { var w = e.which; if (w < 9 || w >

我在
input type='text'
keyup
上发布一个带有
$的表单,
问题是,在发布后,我在浏览器中的任何位置(甚至在firebug控制台上)单击
$。将重复发布

实时链接:

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

我的脚本是这样的:

$('#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(...);
});
$('theforminput:text').keyup(函数(e){
var w=e,其中:;
如果(w<9|w>45&&w<91|w>93&&w<112|w>185)
$(“#表单”).submit();
});
$('#表单输入:隐藏')。更改(函数(){
$(“#表单”).submit();
});
$('#theform')。提交(函数(e){
e、 预防默认值();
...
美元。邮政(……);
});
更新:刚刚注意到没有
$(“#表单输入:隐藏”)。更改(…
一切正常

更新2:显然,文本框也会触发更改,奇怪的是,我注册了
input:hidden
的更改,而不是
input:text


更新3:solved,看起来我应该使用
input[type='hidden']
而不是
input:hidden

在某些浏览器中,更改事件(仅?)当相关输入失去焦点时触发-这就是为什么当您单击页面上的其他位置时会看到另一篇文章。有关更多信息,请参阅-这是关于单选按钮的,但更改/取消焦点行为类似

至于文本框绑定到更改事件的原因:
:hidden
选择器不只是选择类型为hidden的输入。在这种情况下,脚本运行时文本输入在页面上不可见,因此它也被选中(“因为它被隐藏了!)

如果您只希望选择“true”隐藏输入,那么您将需要更难看的选择器
$(“#表单输入[type=hidden]”)

希望这有帮助

PS:使用JS更改输入值。由于hidden类型的输入可能只能通过JS更改,因此您可能只需从更改隐藏值的任何位置调用
$(“#theForm”).submit()