3 Stimmen

Abwarten, ob sich die Anzahl der Tabellenzeilen ändert

Ich habe die html-Tabelle verwendet. Meine Anforderung ist, ich möchte für die Änderungen der Zeilen zählen zu hören. Ist dies irgendwie zu erreichen?

Hinweis: Ich habe nicht die Funktionen zum Hinzufügen/Löschen einer Zeile hier zu erreichen.

Außerdem habe ich das hier ausprobiert,

$("#myTable>tbody>tr").watch("length", function () {
    alert("row count changed..")
});

Aber der obige Code funktioniert bei mir nicht. Könnte jemand von Ihnen wissen, wie man das macht?

Vielen Dank im Voraus,

-Raja.

0 Stimmen

Es scheint, dass OP versucht hat, das folgende jQuery-Plugin zu verwenden: archive.plugins.jquery.com/projekt/watch (die watch("length") bit)

0 Stimmen

Vielen Dank für Ihre Antwort. ja absolut. Aber, der obige Code funktioniert nicht. Könnten Sie meinen Fehler herausfinden?

0 Stimmen

Es gibt wirklich nicht genug Code, der falsch sein könnte. Dieses spezielle Plugin wurde 2009 hinzugefügt und scheint danach aufgegeben worden zu sein. Höchstwahrscheinlich funktioniert es einfach nicht mit modernen Versionen von jQuery.

5voto

Adam Punkte 41698

Sie können das DOM-Ereignis überwachen DOMSubtreeModified ( Beachten Sie, dass das Ereignis veraltet ist. Wenn also jemand einen Vorschlag für ein besseres Ereignis zur Überwachung hat, ändern Sie dies bitte ), die bei einer Änderung des DOM-Baums ausgelöst wird. Wir können jQuery's binden Funktion, um eine Funktion auszulösen, wenn das Ereignis auf der Tabelle ausgelöst wird. Diese Funktion kann prüfen, ob sich die Zeilenzahl geändert hat.

var numberOfRows = $("#myTable>tbody>tr").length;
$("#myTable").bind("DOMSubtreeModified", function() {
    if($("#myTable>tbody>tr").length !== numberOfRows){
        numberOfRows = $("#myTable>tbody>tr").length;
        alert("row count changed..");
    }
});

Probieren Sie es aus!

Siehe: Gibt es einen JavaScript/jQuery DOM change listener?

0 Stimmen

Vielen Dank für Ihre Antwort. Ja, das bringt die Lösung. Aber, DOMSubtreeModified Ereignis wird ausgelöst, auch ich füge das Element zu td. Das ist nicht gut, und alle. Ich werde mehr Anzahl von Zeilen (mehr als 10000rows) verwenden. Also, es klingt nicht richtig für diese situtions.

0 Stimmen

Wow, ich wusste gar nicht, dass es DOM change listener gibt. Dies ist die beste Lösung für mich.

2voto

Kevin B Punkte 94073

Der einzige browserübergreifende Weg, dies zu tun, wäre im Moment mit einem setInterval und möglicherweise einem benutzerdefinierten Ereignis.

setInterval(function() {
    var $t = $("#myTable"),
        rowCount = $t.data("rowCount"),
        rowLength = $t.find("tbody").children().length;
    if (rowCount && rowCount !== rowLength) {
        $t.trigger("rowcountchanged").data("rowCount", rowLength);
    }
    else if (!rowCount) {
        $t.data("rowCount", rowLength);
    }

}, 50);
$("#myTable").on("rowcountchanged",function(){
    alert($(this).data("rowCount"));
});

Ich würde vorschlagen, das Ereignis manuell auszulösen, wenn Sie die Anzahl der Zeilen ändern, anstatt ein Intervall zu verwenden, wenn möglich.

UPDATE:
Verwenden Sie das jqGrid refresh Veranstaltung.

var rowCount = $("#gridid>tbody>tr").length;
jQuery("#gridid").jqGrid({
...
   refresh: function(){ 
      var currCount = $("#gridid>tbody>tr").length;
      if (currCount !== rowCount) {
          alert("Number of rows changed!");
          rowCount = currCount;
      }
   },
...
});

Wenn Sie Zeilen beim Klicken manuell löschen, müssen Sie Ihren Code auch dort ausführen, es sei denn, das Raster wird auch neu geladen.

0 Stimmen

Vielen Dank für Ihre Antwort. Intervall einstellen bringt nicht die Lösung für meinen Fall.

0 Stimmen

Wenn Sie setInterval nicht verwenden können und eine browserübergreifende Lösung wünschen, besteht die einzige andere Möglichkeit darin, den Code zu verwenden, der den Inhalt der Tabelle ändert, um das Ereignis auszulösen. Wodurch wird die Tabelle aktualisiert?

0 Stimmen

Jq grid aktualisiert die Tabelle

0voto

SilentImp Punkte 1715

http://www.w3.org/TR/DOM-Level-2-Events/events.html - können Sie dies verwenden. Aber es gibt keine Implementierung oder Polyfill in IE für einen Moment.

Sie können die TR-Zählung auch mit einer Funktion überprüfen, die vom Timer ausgeführt wird.

0 Stimmen

Ich glaube, Sie denken wahrscheinlich an DOMNodeInserted Sie sollten jedoch einen direkten Link zu seinem Anker im Dokument angeben oder herstellen. Der Kontext der gesamten DOM-Ereignisspezifikation ist nicht im Geringsten hilfreich.

0 Stimmen

Vielen Dank für Ihre Antwort. Ich habe mir diesen Link bereits angesehen, bevor ich ihn hier gepostet habe. Wie ich bereits sagte, wird die Implementierung des Hinzufügens/Löschens von Zeilen nicht verwendet. Aber, die Anzahl der Zeilen wird auf der Grundlage der itemssource ändern.

0 Stimmen

Verwendet ordinar top.window.oldCount=0; Windows.setInterval(200,function(){var count = $("#mytable tr").length; if(count!=top.window.oldCount){top.window.oldCount=count; do_something();}}); function do_something(){} keine Option?

0voto

Alex Punkte 6156

Ich habe das einmal mit einer Zeitschaltuhr gemacht. Es ist nicht sehr hübsch, aber es funktioniert in fast jedem Browser, glaube ich...

http://jsfiddle.net/q5Eqr/

var html;
setInterval(function() {
    var table = $('table');
    if($('table').html() != html){
        alert('Changed!');
        html = $('table').html();
    }
}, 500);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X