我已经研究了几天,但未能找到解决方法。问题在于:
我有一个表单,提交要处理/插入数据库的消息。表单使用$ .post()来提交消息。
有时它工作正常,但偶尔(完全随机,似乎) - 我将不得不按两次提交按钮以获取数据。我第一次按下提交按钮,它出现了#34;提交,因为表格像正常一样清除等 - 但数据没有发送。如果我再次单击提交按钮(不在输入中输入任何内容),它将发送我尝试提交一次的消息。我希望这是有道理的。
换句话说,大部分时间我都可以输入信息,点击提交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();
});
更新 - 添加了用于在显示中加载消息的功能。这称为onLoad,当提交新消息时,它将抓取并显示新数据。
function loadMainDisplay(){
$( "#innercontrols" ).load( "includes/controls.php" );
scrollToBottom();
}
&#34; controls.php&#34;只是一个文件,它抓取来自mysql数据库的消息并以正确的格式回显它们。
在我的index.php(函数/表单所在的位置)的顶部,我检查是否已使用Input类提交任何输入,它看起来像这样:
if(Input::exists()){
$message = Input::get('message');
... validate and insert into db if ok
}
如果您希望链接到实际页面以查看问题,请告诉我,我将发送包含该链接的私人消息。
答案 0 :(得分:2)
jQuery("form").on('submit', function(e) {
e.preventDefault();
jQuery.post("index.php", {
message: jQuery("[name='message']").val()
});
document.m.message.focus();
clear_form();
});
带“Enter”按钮支持的版本:
(CGSize)sizeForText:(NSAttributedString *)string maxWidth:(CGFloat)width
{
CTTypesetterRef typesetter = CTTypesetterCreateWithAttributedString((__bridge CFAttributedStringRef)string);
CFIndex offset = 0, length;
CGFloat y = 0, lineHeight;
do {
length = CTTypesetterSuggestLineBreak(typesetter, offset, width);
CTLineRef line = CTTypesetterCreateLine(typesetter, CFRangeMake(offset, length));
CGFloat ascent, descent, leading;
CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
CFRelease(line);
offset += length;
ascent = roundf(ascent);
descent = roundf(descent);
leading = roundf(leading);
lineHeight = ascent + descent + leading;
lineHeight = lineHeight + ((leading > 0) ? 0 : roundf(0.2*lineHeight)); //add 20% space
y += lineHeight;
} while (offset < [string length]);
CFRelease(typesetter);
return CGSizeMake(width, y);
}