2012-03-30 8 views
1

Ich habe eine Tabelle auf meiner Seite, deren Zeilen mit Ajax erhöht/verringert werden. Ich möchte ein rowcount change-Ereignis haben, das benachrichtigt wird, wenn sich die Zeilenanzahl ändert. Ich habe ein paar Dinge ausprobiert, aber nichts hat funktioniert. Das ist, was ich versucht:jQuery rowcount Änderungsereignis

$("#myTable tr").length.change(function(){ 
    alert("row count changed"); 
}); 

und auch

$("#myTable tbody").change(function(){ 
     alert("table changed"); 
    }); 

aber diese Funktionen werden nicht genannt wurden, wenn Zeilen/Abnahme erhöhen. Bitte legen nahe,

+2

können Sie die Funktion auf Ajax-Erfolg ausführen –

+2

Sie wahrscheinlich besser sind weg in der Ajax-Rückruf setzen Code. Wenn es sich um eine Bibliothek mit einer API handelt, prüfen Sie, ob ein "recordAdded" -Ereignis oder etwas ähnliches vorhanden ist. – hyperslug

+0

Danke für die Antwort, ich werde versuchen und überprüfen Sie die Ajax-Bibliothek, die ich benutze. Aber für den Fall, dass ich es mit jQuery machen möchte, gibt es eine Möglichkeit, das Ereignis rowcount change zu erfassen. – bhuvan

Antwort

2

Änderungsereignisse werden nicht, weil das Ereignis onChange genannt zu werden, die das Ereignis, zu dem die jQuery change() Methode des angegebenen Rückruf bindet, für nur gültig ist <input>, <select> und <textarea> Elemente (reference).

Insbesondere Ihr erstes Beispiel ruft change() auf eine Nummer, die einen Fehler werfen sollte. Ihr letzter Beispiel ruft change() auf einem tbody Element auf, das das Ereignis onChange nicht unterstützt.

Soweit etwas zu bekommen, die Sie tatsächlich funktioniert setInterval() explizit die Anzahl der Zeilen jeder so oft zu überprüfen, um zu verwenden:

setInterval(function(){ 
    if($("#myTable tr").length > 2){ 
    /* do stuff */ 
    } 
}, 1000); 

Dies würde prüfen, ob die Anzahl der Zeilen größer als 2 pro Sekunde ist.

Wenn möglich, würde ich diesen Ansatz nicht verwenden und würde stattdessen versuchen, dieselben Aktionen auszuführen, die Sie an einem mythischen "on row change" -Ereignis an dem Punkt ausführen würden, an dem Sie tatsächlich die AJAX-Aufrufe vornehmen. Wenn überhaupt, könnten Sie einen benutzerdefinierte erstellen jQuery event auf das <table> Element nach jedem AJAX-Aufruf gefeuert werden (zB $("#myTable tr").trigger('my-custom-event'),), die Sie dann hören: $("#myTable tr").bind('my-custom-event', function(){ /* do stuff */ })

auf gut Glück, dass Sie keine Kontrolle oder Zugang zu das JavaScript, das die AJAX-Aufrufe auslöst, die Ihre Zeilen aktualisieren, könnte eine andere Lösung sein, um in das jQuery-Ereignis ajaxSuccess() zu schauen, das ausgelöst wird, wenn eine AJAX-Anforderung erfolgreich auf Ihrer Seite ausgeführt wird. Zum Beispiel:

$('body').ajaxSuccess(function(){ 
    if($("#myTable tr").length > 2){ 
    /* do stuff */ 
    } 
}); 
+0

Hey Chris, vielen Dank. Du hast mir diesen und viele andere Zweifel ausgeräumt. Vielen Dank. Stackoverflow rockt !!!!! – bhuvan