我有一个文本字段,用户在其中输入消息,单击Enter并将其提交到数据库中。问题是,它总是提交多次,取决于按下回车键多少毫秒。我实际上并没有进行任何现场验证,它更像是学习时的概念验证。此外,我知道我可以在一次提交后完全禁用提交表单,但我希望能够继续输入消息。
<input type="text" placeholder="Enter message" id="enterMsg">
$(document).ready(function() {
$("#enterMsg").submit(function(){
var uid = $("#enterMsg").val();
Messages.insert({text: uid});
})
我应该使用不同的html标签还是jquery函数?
答案 0 :(得分:1)
嗯,我认为你不能在文本字段中使用.submit()。我会用表格来做这件事。
HTML:
<form id="myform">
<input type="text" placeholder="Enter message" id="enterMsg" />
</form>
JS:
$(document).ready(function() {
var submitted = false;
$("#myform").submit(function(e){
e.preventDefault();
if(!submitted) {
var uid = $("#enterMsg").val();
Messages.insert({text: uid});
submitted = true; /* You can clear the input or hide the form, or something */
}
});
});
答案 1 :(得分:0)
既然你承认这只是一种纯粹的流行病,因为没有一个心智正常的人会部署这种不安全的东西......
您可以拥有一个全局变量来确定是应该接受还是拒绝提交。在提交提交之前,请检查全局变量。如果设置为TRUE,则接受提交并立即将全局变量设置为FALSE。创建超时,例如1秒,将全局变量重置为TRUE。
这只允许给定用户每秒提交一次。
<form id="myform">
<input type="text" placeholder="Enter message" id="enterMsg">
<input type="submit" />
</form>
var accept_flag = true;
time_between_submissions = 1000;
$(document).ready(function() {
$("#myform").submit(function(){
if (accept_flag) {
var uid = $("#enterMsg").val();
Messages.insert({text: uid});
accept_flag = false;
setTimeout(function() { accept_flag = true; },time_between_submissions);
}
});
当然,这一切都不重要,因为如果您正在提交正确的POST表单,一旦提交表单,浏览器就不会通过按住ENTER键重新提交它。 / p>
如果您通过AJAX执行此操作,则不会使用.submit()方法,您将在窗体上侦听keyPress事件,然后是,您需要实现一种方法来限制提交。