Frage

Ich baue eine Liste mit Kontrollkästchen, nachdem die Liste erstellt wird, ich bin mit „.each“ durch sie gehen alle und versuchen, ein Klick Verfahren anzuwenden.

Ihr Code wie folgt funktioniert:

$.ajax({
    url: "./views/todoitems.view.php",
    data: "cmd=list",
    success: function(html){
        $('#list-container').empty().append(html);
        $('input:checkbox').each(function(){
            $check = $(this);
            $check.click(function(){
                alert($(this).attr('itemid'));
            });
        });
    }
});

Doch sobald ich die Benachrichtigung ändern sein

alert($check.attr('itemid'));

Es zeigt immer nur die ID des letzten Eintrags in der Liste ganz gleich, welche angeklickt wird. Was mache ich falsch?

War es hilfreich?

Lösung

ist $ check innerhalb der einzelnen Handler gesetzt und ist eine globale Variable. Das heißt, es wird die zuletzt eingestellte Wert beibehalten, die letzte Checkbox zu sein. Sie müssen es in den Click-Handler setzen, wenn Sie es richtig machen wollen. Ändern Sie es an:

$.ajax({
  url: "./views/todoitems.view.php",
  data: "cmd=list",
  success: function(html) {
    $('#list-container').empty().append(html);
    $('input:checkbox').each(function(){
      $check.click(function() {
        var $check = $(this);
        alert($check.attr('itemid'));
      });
    });
  }
});

. Hinweis: var wird oben auf Steuerungsbereich verwendet

Auch Sie nicht verwenden each() dafür brauchen. Dies entspricht:

$.ajax({
  url: "./views/todoitems.view.php",
  data: "cmd=list",
  success: function(html) {
    $('#list-container').empty().append(html);
    $('input:checkbox').click(function() {
      alert($(this).attr('itemid'));
    });
  }
});

Andere Tipps

Hinzufügen zu cletus' Antwort (kann ich nicht kommentieren noch) $ check eine implizite globale Variable immer, weil seine Erklärung fehlt var.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top