Javascript 使用函数处理程序提交&x27;行不通

Javascript 使用函数处理程序提交&x27;行不通,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在努力使用JQuery的.submit()函数。我在按下按钮时调用submit,因为我必须在实际提交表单之前进行一些控制。问题是函数处理程序没有被正确调用。事实上,如果我尝试在没有函数处理程序的情况下调用函数submit,那么它可以工作,但是没有。 $(function(){ $(".subBtn").click(function(){ var data=$(".data-torneo").val(); if(d

我正在努力使用JQuery的.submit()函数。我在按下按钮时调用submit,因为我必须在实际提交表单之前进行一些控制。问题是函数处理程序没有被正确调用。事实上,如果我尝试在没有函数处理程序的情况下调用函数submit,那么它可以工作,但是没有。

$(function(){
    $(".subBtn").click(function(){
        var data=$(".data-torneo").val();
        if(data==""){
            $('.error-data').empty().text("Inserisci una data!");
            return false;
        }
        else{
            var check=$('input[type=radio][name=r-button]:checked').val();
            var xhr = new XMLHttpRequest();

            if(check=="fisico"){
                
                var strutt=$('.selected.strutture').text();
                if(strutt!==" Seleziona una Struttura"){
                    xhr.open('GET', '../TournamentControl?action=validateTorneo&datatorneo='+data+'&struttura='+strutt, true);
                    xhr.send();
                }
                else{
                    $('.error-struttura').empty().text("Inserisci una struttura!");
                }
            }
            else if (check=="on-line"){
                xhr.open('GET', '../TournamentControl?action=validateTorneo&datatorneo='+data, true);
                xhr.send();
            }
            
            xhr.onreadystatechange = function() {
                if (xhr.status == 200 && xhr.readyState == 4) {
                    let data = JSON.parse(xhr.responseText);
                    console.log(data);
                    var tipo=data['0'];
                    var errore=data['1'];
                    if(tipo=="null"){
                        //$('form').submit();
                        $('form').submit(function(event){
                            alert('faccio la submit')
                            var struttura=$('.selected.strutture').text();
                            var fisici=$('number-box-tecnici-fisici').text();
                            if(struttura=="")
                                struttura="null";
                            if(isNaN(fisici))
                                fisici=0;
                            
                            $.ajax({
                                url :'TournamentControl?action=saveTorneo',
                                type:'POST',
                                data:'nomeTorneo='+$('.nome-torneo')+
                                     '&isHome='+$('input[type=radio][name=toggle]:checked').val()+
                                     '&gioco='+$('.selected.gioco').text()+
                                     '&mode='+$('.selected.mode').text()+
                                     '&organizzato='+$('input[type=radio][name=r-button]:checked').val()+
                                     '&data='+$(".data-torneo").val()+
                                     '&struttura='+struttura+
                                     '&numTecniciRemoto='+$('number-box-tecnici').text()+
                                     '&numTecniciFisici='+fisici
                            });
                        })
                    }
                    else{
                        
                        if(tipo=="data"){
                            $('.error-data').empty().text(errore);
                        }
                        else if(tipo=="struttura"){
                            $('.error-data').empty().text(errore);
                        }
                    }
                }
            }   
        }
    })
})

摆脱对
$('form').submit()的调用。这是在用户下次提交表单时添加事件侦听器

如果您想使用AJAX提交表单,只需在
xhr.onreadystatechange
函数中直接调用
$.AJAX()

xhr.onreadystatechange = function() {
  if (xhr.status == 200 && xhr.readyState == 4) {
    let data = JSON.parse(xhr.responseText);
    console.log(data);
    var tipo = data['0'];
    var errore = data['1'];
    if (tipo == "null") {
      //$('form').submit();
      alert('faccio la submit')
      var struttura = $('.selected.strutture').text();
      var fisici = $('number-box-tecnici-fisici').text();
      if (struttura == "")
        struttura = "null";
      if (isNaN(fisici))
        fisici = 0;
      $.ajax({
        url: 'TournamentControl?action=saveTorneo',
        type: 'POST',
        data: 'nomeTorneo=' + $('.nome-torneo') +
          '&isHome=' + $('input[type=radio][name=toggle]:checked').val() +
          '&gioco=' + $('.selected.gioco').text() +
          '&mode=' + $('.selected.mode').text() +
          '&organizzato=' + $('input[type=radio][name=r-button]:checked').val() +
          '&data=' + $(".data-torneo").val() +
          '&struttura=' + struttura +
          '&numTecniciRemoto=' + $('number-box-tecnici').text() +
          '&numTecniciFisici=' + fisici
      });
    } else {
      if (tipo == "data") {
        $('.error-data').empty().text(errore);
      } else if (tipo == "struttura") {
        $('.error-data').empty().text(errore);
      }
    }
  }
}

为什么要使用XMLHttpRequest而不是
$.ajax
?如果(tipo==“null”)
正确,是否确定
?如果(tipo==null)
,则可能应该是
。您对
$('form').submit()的调用将创建一个事件处理程序,该处理程序将在用户下次提交表单时运行。那它就不提交表格了。是的,你说得对。我以前从未使用过$.Ajax,这给我带来了麻烦。非常感谢。