我有一个html表单,在提交之前运行javascript函数。表单标记的html是:
<form onsubmit="return sub();" method="post" action="useclick.php">
提交按钮的html为:
<input type="submit" value="Submit" id="submit"/>
一切正常,但我希望用户能够在任何地方按Enter键并提交表单,所以我有这段代码:
$(document).keypress(function(e) {
if(e.which == 13) {
$(this).blur();
$('#submit').focus().click();
}
});
除了IE之外,这正是我想要的所有浏览器。在IE中,它确实单击了提交按钮,然后发送表单,但它不首先运行sub()函数。它在IE 8和10中是相同的,这是我目前唯一可以访问的版本。
为完整起见,sub()函数如下所示:
function sub(){
document.getElementsByName('coords')[0].value = JSON.stringify(coordsArray);
return true;
}
我对javascript很新,对jQuery很新,所以任何帮助都会非常有用。
答案 0 :(得分:3)
你试过了吗?
$(document).keypress(function(e) {
if(e.which == 13) {
$(this).blur();
$('#your_form_id').submit();
return false;
}
});
从某种意义上说,您是以编程方式提交和阻止随后的事件链。
<强>更新强> 更改了它并进行了JSFiddle演示。让我知道它是否适合你。
<h2>Form</h2>
<form action="" method="post" id="myform">
First Name:<input type="text" name="Fname" maxlength="12" size="12"/> <br/>
Last Name:<input type="text" name="Lname" maxlength="36" size="12"/> <br/>
<p><input id="submit" type="submit" /></p>
</form>
<h2>JSON</h2>
<pre id="result">
</pre>
<script>
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
$(' input').keypress(function(e) {
if(e.which == 13) {
console.log('Enter pressed');
$('#submit').blur();
$('#myform').submit();
e.preventDefault();
return false;
}
});
$(function() {
$('form').submit(function() {
console.log('submitted');
$('#result').text(JSON.stringify($('form').serializeObject()));
return false;
});
});
</script>
更新#2 嗨,你需要确保绑定到你想听的元素。在这种情况下,文档中的所有元素。通常,要听取关键事件,这些元素应该是可关注的。在这个新的JSFiddle中,输入按下事件如上所述。确保首先在文档中的任何位置聚焦(读取:单击)。 让我知道它是怎么回事。
更新#3 添加了此JSFiddle以确保正文已聚焦且具有tabIndex。如果这对您有用,请接受答案。
答案 1 :(得分:0)
IE对脚本类型严格。因此,请确保使用type="text/javascript"
。
例如:
<script type="text/javascript" src="script.js"></script>