Ich habe ein Kontrollkästchen und klicke auf Ereignis für Kontrollkästchen zum Aktualisieren von Daten. Wenn ich auf das Kontrollkästchen klicke, werden die Daten aktualisiert, aber das Kontrollkästchen wird nicht aktiviert.

Das ist mein HTML-Code:

<td>
 <input type="checkbox" data-bind="checked: status, disable: status, click: $root.UpdateStatus" />
</td>

Das ist mein Drehbuch:

self.UpdateStatus = function (tblUsers) {
    $.ajax({
        type: "POST",
        url: 'SinglePageApp.aspx/UpdateStatus',
        data: "{statusVal: 'true',goalId: " + tblUsers.goalId + "}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert(result.d);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
            alert(errorThrown);
        }
    });
};

Ich möchte, dass mein Kontrollkästchen aktiviert wird, wenn darauf geklickt wird. Und danach setzen Sie aktualisierte Daten, nachdem das Kontrollkästchen angeklickt wurde.

8
akeeseth 9 Okt. 2012 im 12:39

4 Antworten

Beste Antwort

Siehe : http://knockoutjs.com/documentation/click-binding.html

Hinweis 3: Zulassen der Standardklickaktion
Standardmäßig verhindert Knockout, dass das Klickereignis ein Ereignis ausführt Standardaktion. Dies bedeutet, dass, wenn Sie die Klickbindung auf einem a verwenden Tag (ein Link), der Browser ruft beispielsweise nur Ihren Handler auf Funktion und navigiert nicht zum href des Links. Dies ist nützlich Standard, weil, wenn Sie die Klickbindung verwenden, dies normalerweise der Fall ist Sie verwenden den Link als Teil einer Benutzeroberfläche, die Ihre Ansicht bearbeitet Modell, nicht als regulärer Hyperlink zu einer anderen Webseite.

Wenn Sie jedoch die Standardklickaktion fortsetzen möchten, einfach Geben Sie true von Ihrer Click-Handler-Funktion zurück.


Bearbeiten: true success error
self.UpdateStatus = function (tblUsers) {
    $.ajax({
        type: "POST",
        url: 'SinglePageApp.aspx/UpdateStatus',
        data: "{statusVal: 'true',goalId: " + tblUsers.goalId + "}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert(result.d);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
            alert(errorThrown);
        }
    });
    // Return true to allow default click action.
    return true;
};
25
Willem 15 Okt. 2012 im 08:35

Es scheint, als würden Sie das Kontrollkästchen deaktivieren, wenn status = false. Sie können den Status jedoch nur auf true setzen, wenn Sie ihn aktivieren. Aus diesem Grund wird das Kontrollkästchen nie aktiviert, obwohl Knockout weiß, dass es angeklickt wurde.

Da es deaktiviert ist, können Sie das Kontrollkästchen nicht aktivieren. Sie müssen daher die Datenbindung disable: status entfernen oder die Logik disable an einer Stelle platzieren, damit Sie den Wert des Kontrollkästchens tatsächlich ändern können .

0
Jensen Ching 9 Okt. 2012 im 08:44

Ich habe es hier versucht und es funktioniert, wenn UpdateStatus true zurückgibt (ohne den Wert zu verhindern) -change) und status müssen offensichtlich ein beobachtbarer Wert sein.

0
Johannes Egger 9 Okt. 2012 im 09:00

Dies liegt daran, dass das Standardverhalten von Ereignishandlern in Knockout darin besteht, die Standardaktion für das Ereignis zu deaktivieren. In diesem Fall macht das Ihr click Handler.

Eine von mir empfohlene Lösung besteht darin, die Verwendung des Handlers click zu vermeiden und Ihr UpdateStatus als Abonnement für den Status auszuführen. In Ihrem Ansichtsmodellkonstruktor sollten Sie self.status.subscribe(self.UpdateStatus, self); hinzufügen

Eine andere Lösung ist die hier erwähnte , bei der true von Ihrem click Handler zurückgegeben wird.

0
Community 23 Mai 2017 im 12:33