2010-11-21 5 views
3

Hallo Ich habe ein Formular, das eine Reihe von Elementen über Ajax hinzugefügt haben kann. Wenn diese Zeile jedoch hinzugefügt wird, können die neuen Eingaben keinen Fokus erhalten.Wie man Jquery über die angehängte Formularzeile informiert

Bei dem Versuch, dies auszuarbeiten, entdeckte ich, dass sie Fokus erhalten, wenn eine Warnung während der Bindefunktion ausgelöst wird.

Ich habe nach Antworten gesucht, aber ich kann es einfach nicht zum Laufen bringen. Ich denke, "Live" -Funktion könnte verwandt sein, aber ich bekomme nicht wirklich, wie man es benutzt.

Hier ist mein Code.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), dataType:"html", success:function (data, textStatus) {$("#saleitems").append(data);}, type:"get", url:"\/saleitems\/add\/" + $rows}); 
    $rows = $rows + 1; 
// alert("uncomment this to enable focus"); 
    $("#autoComplete_1").focus();  
    return false; 

}); 

Vielen Dank!

+0

Weitere Informationen zum Live-Event finden Sie in der API: http://api.jquery.com/live/. Grundsätzlich werden Listenern Elemente zugewiesen, die jetzt oder in Zukunft mit dem Selektor übereinstimmen. –

Antwort

2

Es klingt wie ein Timing-Problem. $ .ajax ist ein asynchroner Aufruf. Wenn Sie die Warnung auskommentiert haben, wird der Aufruf von .focus() ausgeführt, bevor der Ajaxaufruf ausgeführt wird und bevor die Erfolgsfunktion aufgerufen und die neue Eingabe hinzugefügt wurde. Wenn Sie die Warnung hinzufügen, wird der Aufruf von .focus() so lange verzögert, bis der Ajax-Aufruf abgeschlossen ist.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), dataType:"html", success:function (data, textStatus) { 
     $("#saleitems").append(data); 
     $rows = $rows + 1; 
     $("#autoComplete_1").focus();  
    }, type:"get", url:"\/saleitems\/add\/" + $rows}); 
    return false; 
}); 
+0

omg. es funktionierte. Danke Erv! – Will

1

Versuchen Sie, den Fokus innerhalb der Callback geben:

Setzen Sie die .focus() (und wahrscheinlich die Zeile $ Zuwachs auch) in dem Erfolgsfunktionsaufruf, so dass es nur läuft, nachdem der Ajax-Aufruf beendet Funktion. Da Sie einen AJAX verwenden, der asynchron ist, müssen Sie warten, bis die Daten geladen sind.

$("#doogal").bind("click", function (event) { 
    $.ajax({data:$("#doogal").closest("form").serialize(), 
     dataType:"html", 
     success:function (data, textStatus) { 
      $("#saleitems").append(data); 

      $rows = $rows + 1; 
      $("#autoComplete_1").focus(); 
     }, 
     type:"get", 
     url:"\/saleitems\/add\/" + $rows 
    }); 

    return false; 

}); 
+0

Danke, dass du dir die Zeit genommen hast, diese & die obige Antwort hat mich über die Ziellinie gebracht! – Will

Verwandte Themen