我已经研究了几天,但无法找到解决方法。这是问题所在:
我有一个表单,用于提交要处理/插入数据库的消息。该表单使用$ .post()提交消息。
有时它工作得很好,但是偶尔(看起来是完全随机的)-我将不得不按两次提交按钮才能使数据通过。第一次按下提交按钮时,它会“显示”为已提交,这是因为表单会像正常情况一样清除,但不会发送数据。如果我再次单击“提交”按钮(在输入中未输入任何内容),它将发送一条消息,我试图一键提交。我希望这是有道理的。
换句话说,在大多数情况下,我可以输入一条消息,单击“提交1次”,这样就可以正常工作。但是随机地,我将不得不多次单击提交以使数据实际提交。
有时,“小故障”将连续发生多次。发生这种情况时,我必须一遍又一遍地点击“提交”,直到发送完所有邮件。就像他们以某种方式排队一样?
这是我用来提交数据的函数:
function postMsg() {
$.post("index.php", {
message: $("[name='message']").val()
});
document.m.message.focus();
return false;
}
我正在使用的表单标签:
<form class="form-inline" id="m" name="m" method="post" onSubmit="postMsg();clear_form();return false">
万一出于某种原因需要它,我正在使用的clear_form()函数:
function clear_form() {
document.getElementById('message').value = '';
}
如果有人能帮助我指出正确的方向,将不胜感激。
更新为包括Crone提供的功能-它可以工作,但是仍然存在需要多次提交数据才能通过的问题:
jQuery("#m").submit(function(e) {
e.preventDefault();
jQuery.post("index.php", {
message: jQuery("[name='message']").val()
});
document.m.message.focus();
clear_form();
});
UPDATE-添加了我用于在显示屏中加载消息的功能。这称为onLoad,当提交新消息时,它将捕获并显示新数据。
function loadMainDisplay(){
$( "#innercontrols" ).load( "includes/controls.php" );
scrollToBottom();
}
“ controls.php”只是一个从mysql数据库中获取消息并以适当格式回显它们的文件。
在我的index.php顶部(函数/表单位于的位置),我检查一下是否已经使用Input类提交了任何输入,如下所示:
if(Input::exists()){
$message = Input::get('message');
... validate and insert into db if ok
}
如果您想直接看到实际页面的链接,请告诉我,我将通过该链接发送悄悄话。
jQuery('form [type="submit"]').on('click', function(e) {
e.preventDefault();
jQuery.post("index.php", {
message: jQuery("[name='message']").val()
});
document.m.message.focus();
clear_form();
});
具有“ Enter”按钮支持的版本:
jQuery("form").on('submit', function(e) {
e.preventDefault();
jQuery.post("index.php", {
message: jQuery("[name='message']").val()
});
document.m.message.focus();
clear_form();
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句