2010-12-06 30 views
10

Ich verwende .submit(), um zu erkennen, wenn ein Formular übergeben wird, aber anstatt die angefügte Funktion auszuführen, wird die Seite aktualisiert.jQuery form.submit() Aktualisieren der Seite anstelle des Sendens

Ich baue ein Werkzeug zum Zeichnen von Stammbaumdiagrammen (mit verschachtelten Listen) unter http://chris-armstrong.com/familytree.

Um einen Nachkommen hinzuzufügen, schalten Sie die Kontrollen ein und es fügt <li class="add_member">+</li> zu jedem <ul> (oder Generation) hinzu.

Wenn Sie auf ein <li class="add_member">+</li> Element klicken, ersetzt er die + mit einem <form class="add_member> bestehend aus einem <input> und einer <submit> Taste. Ich habe dann $("form.add_member").submit() verwendet, um zu erkennen, wenn die Schaltfläche zum Senden geklickt wird, und es sollte ersetzen Sie dann das Formular mit dem Inhalt der <input>, aber an dieser Stelle aktualisiert es nur die Seite (und fügt ein? An die URL).

Irgendwelche Ideen, was ich falsch mache? Ich habe die ganze Funktion unten angehängt.

function addAddListeners() { 
      $('li.add_member').click(function(){ 

      //create input form 
      $(this).html("<form class='add_member'><input id='fn_' placeholder='Name' required autofocus /><button type='submit'>Add</button></form>") 

      //listen for input form submission 
      $("form.add_member").submit(function(){ 

      //if input form isn't blank, create new li element with content of form, else go back to the add_member li 
      if($('form.add_member').val()) { 
         $(this).replaceWith('<li><span class="vcard" title="Click to edit this members details"><span class="edit fn">'+$('input#fn_').val()+'</span></span><ul><li class="add_member">+</li></ul></li><li class="add_member">+</li>'); 
         addEditListeners(); 
         addAddListeners(); 
        } else { 
         alert("no change"); 
        $(this).html("+"); 
        } 
       }); 

      }); 
     } 

BEARBEITEN: Hinzufügen return false; stoppt die Seitenauffrischung, aber die an .submit() angehängte Funktion scheint nicht abzufeuern, irgendwelche Ideen warum?

+1

hinzufügen retrun falsch am Ende ... von Formular-Funktion /// – kobe

+0

ich die Antwort als Kommentar hinzugefügt zuerst, werde ich es ändern zu beantworten/ – kobe

+0

@gov sorry, Alle antworteten ungefähr zur selben Zeit, also ging ich mit demjenigen, der am detailliertesten war (darüber nachzudenken, was den Leuten am nützlichsten wäre, die die Frage in der Zukunft nachschlagen könnten). Vielen Dank für Ihre Hilfe, denken Sie nicht, dass Sie eine Ahnung von dem zweiten Problem haben würden? –

Antwort

17
  1. Sie müssen return false; oder event.preventDefault(); von der Senden-Funktion, um die Standardformularaktion zu verhindern.
  2. Sie sollten in jQuery on mit Delegation suchen, so dass Sie keine Ereignisse neu binden müssen, wenn neue Elemente zum DOM hinzugefügt werden.
+0

Danke, das erneute Binden hat Probleme verursacht! Werde mich definitiv darum kümmern. –

+0

Oh mein Gott seit 3 ​​Jahren. Ich habe alle meine Ereignisse gelöst und neu eingebunden, wenn ich meinem DOM ein neues Element hinzufüge. Ich kann nicht glauben, dass ich nie von Delegierten erfahren habe. –

+0

@DarkAshelin: Der Weg, um es als jQuery 1.7 zu tun, ist die 'on' Funktion. –

2

Ich denke, Sie müssen return false; am Ende Ihrer .submit().

+0

ist es innerhalb der Submit-Funktion oder direkt danach? –

3

Fügen Sie eine Rückgabe hinzu: false; auf Ihre einreichen Funktion:

$("form.add_member").submit(function(){ 

      //if input form isn't blank, create new li element with content of form, else go back to the add_member li 
      if($('form.add_member').val()) { 
         $(this).replaceWith('<li><span class="vcard" title="Click to edit this members details"><span class="edit fn">'+$('input#fn_').val()+'</span></span><ul><li class="add_member">+</li></ul></li><li class="add_member">+</li>'); 
         addEditListeners(); 
         addAddListeners(); 
        } else { 
         alert("no change"); 
        $(this).html("+"); 
        } 
       }); 
      return false; 
      }); 
+0

Danke, das hat die Aktualisierung gestoppt, aber die Funktion, die an .submit() angehängt ist, scheint nicht abzufeuern ... irgendwelche Ideen warum? –

+0

Ich würde $ ('form.add_member') alarmieren.val() und stellen Sie sicher, dass es etwas Gültiges zurückgibt. Vielleicht ändere diese Zeile zu if ($ ('form.add_member'). Val() == '... tatsächlicher Elementwert ...') – wajiw

+0

Ich habe tatsächlich eine Benachrichtigung erhalten, die direkt nach der .submit (Funktion () {und es feuert nicht ab. Sehr seltsam ... –

Verwandte Themen