2015-07-13 11 views
7

Ho creato un modulo utilizzato per esaminare una persona su un sito Web, tuttavia quando il modulo non viene inviato non accade nulla e la console visualizza "Stack massimo chiamate superato". Spero che qualcuno possa aiutare a segnalare l'errore nel mio codice, impedendo che funzioni. Ecco il codice del modulo:Invio del modulo che causa il superamento della dimensione massima dello stack di chiamate

<form id="fReviewMe" method="post" action="/process/review-p.cfm" enctype="multipart/form-data" style="display:none"> 
    <label style="padding-top:10px"><i class="fa fa-asterisk magenta"></i> Your Name:</label> 
    <input type="text" name="uname" id="uname" class="span8" placeholder="Please tell us your name"> 
    <label><i class="fa fa-asterisk magenta"></i> Your Business Name:</label> 
    <input type="text" name="business" id="business" class="span8" placeholder="Please tell us your business name"> 
    <label><i class="fa fa-asterisk magenta"></i> Your Review:</label> 
    <textarea name="reviewmsg" id="reviewmsg" class="span8" rows="8" placeholder="Please add your review in here"></textarea> 
    <!--- form errors ---> 
      <div id="dFormErrors" class="row" style="display:none;padding-bottom:20px;"> 
       <span id="sEMessage" class="pull-right"></span> 
       <i class="fa fa-asterisk magenta pull-right"></i> 
      </div> 

    <!--- form buttons ---> 
    <div id="dButtonsReviewForm" class="row"> 
     <a onClick="checkForm()" name="submit" class="cta pull-right">Submit</a> 
     <a href="javascript:hideReviewMe()" class="pull-right cta" style="margin-right:6px">Cancel</a> 
    </div> 
    <!--- form saving ---> 
     <div id="dSavingReviewForm" style="display:none"> 
      <span class="pull-right hibuBtn" style="cursor:wait"><i class="fa fa-spinner fa-spin"></i> Saving</span> 
     </div> 

ecco il codice JS:

/* intercept submit event */ 
$("#fReviewMe").submit(function(event) { 
    checkForm(); 
    event.preventDefault(); 
}); 

/* form validation */ 
function checkForm(){ 

    var errors = 0; 
    var cuname = $('#uname').val(); 
    var ccompany = $('#business').val() 
    var creview = $('#reviewmsg').val() 
    var cstars = $('#rStar').val() 
    var eMessage = ""; 
    $('#dFormErrors').hide(); 
    $('input').removeClass('validFalse'); 
    $('textarea').removeClass('validFalse'); 

if ($('#tnc').is(':checked')) { 
} 
else{ 
    eMessage = "Please tick to accepts out terms and conditions"; 
    errors++; 
} 

if(cstars.length < 1){ 
    $("input").blur(); 
    $("textarea").blur(); 
    eMessage = "Please choose a star rating"; 
    errors++; 
} 

if(creview.length < 1){ 
    $('#reviewmsg').focus(); 
    $('#reviewmsg').addClass('validFalse'); 
    eMessage = "Please add your review"; 
    errors++; 
} 
else{ 
    $('#reviewmsg').addClass('validTrue'); 
} 

if(ccompany.length < 1){ 
    $('#business').focus(); 
    $('#business').addClass('validFalse'); 
    eMessage = "Please tell us your business name"; 
    errors++; 
} 
else{ 
    $('#business').addClass('validTrue'); 
} 

if(cuname.length < 1){ 
    $('#uname').focus(); 
    $('#uname').addClass('validFalse'); 
    eMessage = "Please tell us your name"; 
    errors++; 
} 
else{ 
    $('#uname').addClass('validTrue'); 
} 

/* check errors and submit */ 
if(errors > 0){ 
    $('#dFormErrors').slideDown(); 
    $('#sEMessage').html(eMessage) 
} 
else{ 
    $('#dButtonsReviewForm').hide(); 
    $('#dSavingReviewForm').show(); 
    $('#fReviewMe').submit(); 
} 

}; 

Grazie in anticipo

risposta

23

Sostituire $('#fReviewMe').submit(); con:

$('#fReviewMe')[0].submit(); 

chiamando DOM metodo nodo submit per evitare submit jQuery handler 'loop'.

+0

Ho appena provato questo e funziona! Grazie :) –

+0

@A. Grazie Wolff per aver sottolineato che ce n'è un altro quindi clicca per inviare, mi hai dato una lezione. Ho cancellato la mia risposta in quanto non ha considerato tutte le possibilità. – fuyushimoya

0

Il problema è perché si sta attivando l'evento all'interno del vostro submitsubmit() gestore, causando un ciclo infinito. È necessario modificare la logica:

$("#fReviewMe").submit(checkForm); 

function checkForm(e) { 
    // all your validation logic here... 

    if (errors > 0) { 
     e.preventDefault(); // < stop form submission on error 
     $('#dFormErrors').slideDown(); 
     $('#sEMessage').html(eMessage) 
    } 
    else{ 
     $('#dButtonsReviewForm').hide(); 
     $('#dSavingReviewForm').show(); 
    } 
} 
Problemi correlati