2017-10-24 9 views
0

Ich habe einen JavaScript-Code geschrieben, der Eingaben von einem Kontaktformular verarbeitet. Unter Verwendung von Ajax sende ich die Eingabeinformationen an das Backend, um eine E-Mail zu senden.Email wird mehrmals gesendet

Es scheint jedoch, dass mein Code irgendwie mehrere E-Mails anstatt einer sendet. Die Nachricht "E-Mail wird gesendet" wird einige Male angezeigt.

Kann mir jemand sagen, was schief gelaufen ist?

JavaScript-Code:

$(document).on('click', '.individual_contact', function(e) { 
    e.preventDefault(); 
    var user_name = $('span#user-name').text(); 
    var recipient_name = $(this).attr('data-ind'); 
    console.log('recipient_name='+recipient_name); 

    $("div#content").hide('fast'); 
    $("#section-form").show('fast'); 
    $("#section-form #recipient").attr('data-contact', recipient_name); 
    $("#section-form #recipient").attr('placeholder', 'TO: '+recipient_name.toUpperCase()); 
    $("#section-form #name").val('FROM: '+user_name.toUpperCase()); 

    $('.submit_icontact').click(function(e) { 
     var subject = $('input#subject').val(); 
     var message = $('textarea#message').val(); 

     e.preventDefault(); 
     var form = new FormData(); 
     form.append('user_email', ajaxobject.user_id); 
     form.append('user_name', user_name); 
     form.append('recipient_name', recipient_name); 
     form.append('subject', subject); 
     form.append('message', message); 
     form.append('action', 'contact_individual'); 
     console.log(form); 

     $.ajax({ 
      type: 'POST', 
      url: ajaxobject.ajaxurl, 
      enctype: 'multipart/form-data', 
      cache: false, 
      contentType: false, 
      processData: false, 
      data: form, 
      dataType: 'json', 
      success: function(response) { 
       console.log('Email is sent'); 
      }, 
      error:function(err){ 
       console.log('err,error') 
      } 
     }); 
    }); 
}) 
+2

Jedes Mal, wenn Sie auf .individual_contact klicken, es fügt einen weiteren Ereignishandler zu .submit_icontact hinzu und klickt so auf .individuell _contact bedeutet einmal, dass das Klicken auf .submit_icontact 1 E-Mail sendet, das Klicken auf .individual_contact zweimal bedeutet .submit_icontact sendet 2 E-Mails usw. Sie sollten den Ereignishandler nur einmal .submit_icontact zuweisen. – James

+0

Vielen Dank für Ihre Erklärung. Du hattest Recht. @ James – ApplePie

Antwort

3

Jedes Mal, wenn Sie auf einem .individual_contact klicken Sie einen anderen Ereignis-Listener .submit_icontact hinzufügen.

Ihre .submit_icontact Click-Ereignis Bewegen aus Ihrem .individual_contact Click-Handler

+0

Ich schätze Ihre Antwort wirklich. Durch das Verschieben des .submit_icontact wurde das Problem behoben. – ApplePie

1

Wechsel:

$('.submit_icontact').click(function(e) { 

An:

$('.submit_icontact').unbind().click(function(e) { 
+1

Genau das habe ich gesucht! Ich danke dir sehr! – ApplePie