Rolf B: Inline editing

Beitrag lesen

Hallo Bernd,

je nach Konstruktion deiner Tabelle ist $(".artikelstandort").change(...) sogar der falsche Weg. Wenn Du per JS Zeilen hinzufügen kannst, werden die neuen Zeilen keine change-Registrierung aufweisen.

Deswegen gibt es in jQuery ab Version 1.7 die .on Funktion. Angenommen, deine Tabelle hat ein id="artikeltabelle" Attribut, und deine Standort-Inputs die artikelstandort-Klasse, dann könntest Du schreiben:

$("#artikeltabelle").on("change", "input.artikelstandort", function(event) {
   // geänderter Standort
});

Die Registrierung des Eventhandlers erfolgt damit auf der Tabelle, nicht auf den einzelnen input-Elementen, und jQuery nutzt das Event Bubbling, um alle change-Events innerhalb der Tabelle zu behandeln. Der zweite Parameter von .on() ist ein CSS Selektor, der jQuery sagt, für welche Elemente Du auf das change-Event reagieren willst.

Übrigens, deine data-Attribute beziehen sich doch mutmaßlich auf die ganze table row, richtig? Es wäre dann nach meinem Gefühl „korrekter“, sie nicht an das input-Element zu klemmen, sondern an das tr Element. Da kommst Du mit jQuery problemlos heran:

var $row = $(this).closest("tr")
var projectId = $row.data("projektId");
var cartId = $row.data("warenkorbId");

Wenn eine dieser IDs für alle Rows gleich ist, gehört sie sogar an das table-Element. Und dann solltest Du sie während der Event-Registrierung auslesen, so dass die Variable, in der sie steht, per Closure im Eventhandler verfügbar ist. „Don't Repeat Yourself“.

Rolf

--
sumpsi - posui - clusi