2013-10-07 5 views
6

Ich bin nicht sehr vertraut mit Jquery. Ich versuche ein Formular zu erstellen, das im Hintergrund gesendet wird, ohne die Seite neu zu laden. Ich habe ein verstecktes div, das auf Klick zeigt und versteckt, innerhalb des div gibt es ein Formular.Jquery Formular einreichen ohne neu zu laden Seite

Ich habe zwei Probleme:

1) Wenn die Form der Validierung fehlschlägt, wird das Formular noch vorgelegt. Ich habe versucht, Validierungs- und Übermittlungscodes in der Bedingung if(validation == valid) { $.ajax.... } zu setzen, aber es funktioniert nicht richtig.

2) Nachdem das Formular abgeschickt wurde, wird das div automatisch ausgeblendet, so dass keine erfolgreiche Nachricht angezeigt werden kann.

Hier ist der Code:

$().ready(function() { 

    // validate the form when it is submitted, using validation plugin. 
    var validator = $("#contactform").validate({ 
     errorContainer: container, 
     errorLabelContainer: $(), 
    onkeyup: false, 
    onclick: false, 
    onfocusout: false, 
    errorPlacement: function (error, element) { 
error.insertBefore(element);  
} 
    }); 
}); 

$(function() { 

    //this submits a form 
$('input[type=submit]').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "contact.php", 
      data: $("#contactform").serialize(), 
      beforeSend: function() { 
       $('#result').html('<img src="loading.gif" />'); 
      }, 
      success: function(data) { 
       $('#result').html(data); 
      } 

     }) 
    }) 
}) 


//this shows and hides div onlcick 
$(document).ready(function(){ 
     $(".slidingDiv").hide(); 
     $(".show_hide").show(); 
    $('.show_hide').click(function(){ 
    $(".slidingDiv").slideToggle(); 
    }); 
}); 

Antwort

16

Anstatt binden an das Click-Ereignis (input[type=submit]) Sie zum submit Ereignis für das Formular binden sollte.

$("form").on("submit", function (e) { 
    e.preventDefault(); 

Ich bin mir auch nicht sicher über die Validierung. Wenn es asynchron ausgeführt wird, ist ein Rückruf erforderlich. Wenn es synchron läuft, wann wird es ausgelöst? Es scheint, wie es getan werden soll, wenn das Formular abgeschickt wird, es sei denn die Validierung Plugin tut das auf seinem eigenen:

$("form").on("submit", function (e) { 
    e.preventDefault(); 
    if ($(this).validate(options)) { 
     $.ajax 

e.preventDefault Mit Reload verhindern und sollte Ihrem Erfolg div erlauben anzuzeigen.

+0

Danke, e.preventDefault den Trick für die Einreichung und Erfolg div tat. – qwaz

+0

Ich möchte die Aktualisierung nach dem Absenden des Formulars verhindern..dieser Code funktioniert nicht richtig –

+0

Dies funktionierte für mich vor Ort. Aber als ich auf meinen gehosteten Server hochgeladen habe, warf der Aufruf .on ("submit", ..) einen undefinierten Fehler auf ... keine Ahnung warum, weil ich denke, dass ich dieselbe Version von jQuery habe, wo auch immer mein Code bereitgestellt wird ?! Ich habe eine Alternative gefunden, um die Zeile folgendermaßen zu aktualisieren: $ ("form"). Submit (function (e) {..}); .. das hat dann gut funktioniert – gnB

0

1) verwenden Event.preventDefault(); die Form zu halten von einreichen -. http://api.jquery.com/event.preventDefault/

2) gibt es in der gegebenen Skript nichts ist, die #result zu verstecken becausing sollte ... aber Sie können $ (‚# Ergebnis‘) show() versuchen, sehen, ob es bringt

zurück
+0

Seth, es ist nicht das #result, dass es ein $ versteckt („slidingDiv“) – qwaz

+0

Ok dann auf .sliddingDiv wechseln zurück –

1

Bitte überprüfen Sie, welche jquery-Version Sie verwenden, da nach jquery 1.8.2 "Erfolg" -Funktion von jquery Ajax veraltet ist.

Verwenden Sie e.preventDefault(), um das tatsächliche Sendeereignis zu verhindern.