防止对提交函数执行多个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,并根据您是否发送的值设置一个条件来检查其值