防止对提交函数执行多个Javascript
我使用以下代码允许用户向在线板提交内容:防止对提交函数执行多个Javascript,javascript,chat,Javascript,Chat,我使用以下代码允许用户向在线板提交内容: $('form').submit(function(){ var form = $(this); var name = form.find("input[name='name']").val(); var code = form.find("input[name='code']").val(); var content = form.find("inpu
$('form').submit(function(){
var form = $(this);
var name = form.find("input[name='name']").val();
var code = form.find("input[name='code']").val();
var content = form.find("input[name='content']").val();
if (name == '' || content == '')
return false;
$.post(form.attr('action'), {'name': name, 'code' : code, 'content': content}, function(data, status){
$('<li class="pending" />').text(content).prepend($('<small />').text(name)).appendTo('ul#messages');
$('ul#messages').scrollTop( $('ul#messages').get(0).scrollHeight );
form.find("input[name='content']").val('').focus();
});
return false;
});
$('form')。提交(函数(){
变量形式=$(此);
var name=form.find(“输入[name='name']”).val();
var code=form.find(“输入[name='code']”).val();
var content=form.find(“输入[name='content']”).val();
如果(名称=“”| |内容=“”)
返回false;
$.post(form.attr('action'),{'name':名称,'code':代码,'content':content},函数(数据,状态){
$(').text(content).prepend($('').text(name)).appendTo('ul#messages');
$('ul#messages').scrollTop($('ul#messages').get(0.scrollHeight);
form.find(“输入[name='content']”).val(“”).focus();
});
返回false;
});
不幸的是,如果用户快速按enter键或快速单击send按钮,代码将执行多次,他们的消息将被发送多次
如何修改代码以防止这种多次执行?一个简单的客户端修复方法是创建一个局部变量,跟踪是否提交了任何内容,并仅在false时执行该函数
var submitted = false;
$('form').submit(function(){
var form = $(this);
var name = form.find("input[name='name']").val();
var code = form.find("input[name='code']").val();
var content = form.find("input[name='content']").val();
if (name == '' || content == '')
return false;
if (submitted)
return false;
submitted = true;
$.post(form.attr('action'), {'name': name, 'code' : code, 'content': content}, function(data, status){
$('<li class="pending" />').text(content).prepend($('<small />').text(name)).appendTo('ul#messages');
$('ul#messages').scrollTop( $('ul#messages').get(0).scrollHeight );
form.find("input[name='content']").val('').focus();
});
return false;
});
var submitted=false;
$('form')。提交(函数(){
变量形式=$(此);
var name=form.find(“输入[name='name']”).val();
var code=form.find(“输入[name='code']”).val();
var content=form.find(“输入[name='content']”).val();
如果(名称=“”| |内容=“”)
返回false;
如果(已提交)
返回false;
提交=真实;
$.post(form.attr('action'),{'name':名称,'code':代码,'content':content},函数(数据,状态){
$(').text(content).prepend($('').text(name)).appendTo('ul#messages');
$('ul#messages').scrollTop($('ul#messages').get(0.scrollHeight);
form.find(“输入[name='content']”).val(“”).focus();
});
返回false;
});
更好的解决方案是向客户端发送事务的唯一令牌,并让客户端将其与请求一起发送。
您可以对服务器端进行编码,以验证令牌只使用过一次。一个简单的客户端修复方法是创建一个局部变量,跟踪是否提交了任何内容,并仅在false时执行该函数
var submitted = false;
$('form').submit(function(){
var form = $(this);
var name = form.find("input[name='name']").val();
var code = form.find("input[name='code']").val();
var content = form.find("input[name='content']").val();
if (name == '' || content == '')
return false;
if (submitted)
return false;
submitted = true;
$.post(form.attr('action'), {'name': name, 'code' : code, 'content': content}, function(data, status){
$('<li class="pending" />').text(content).prepend($('<small />').text(name)).appendTo('ul#messages');
$('ul#messages').scrollTop( $('ul#messages').get(0).scrollHeight );
form.find("input[name='content']").val('').focus();
});
return false;
});
var submitted=false;
$('form')。提交(函数(){
变量形式=$(此);
var name=form.find(“输入[name='name']”).val();
var code=form.find(“输入[name='code']”).val();
var content=form.find(“输入[name='content']”).val();
如果(名称=“”| |内容=“”)
返回false;
如果(已提交)
返回false;
提交=真实;
$.post(form.attr('action'),{'name':名称,'code':代码,'content':content},函数(数据,状态){
$(').text(content).prepend($('').text(name)).appendTo('ul#messages');
$('ul#messages').scrollTop($('ul#messages').get(0.scrollHeight);
form.find(“输入[name='content']”).val(“”).focus();
});
返回false;
});
更好的解决方案是向客户端发送事务的唯一令牌,并让客户端将其与请求一起发送。
您可以对服务器端进行编码,以验证令牌只使用过一次。找到了此解决方案
找到了这个解决方案
我可以放一个布尔变量。如果发送了表单,您可以将此变量的值更改为true或false,并根据您发送的值或Not设置一个条件来检查其值。我可以设置一个布尔变量。如果发送了表单,您可以将此变量的值更改为true或false,并根据您是否发送的值设置一个条件来检查其值