在敲除时不会检查复选框

ake*_*eth 8 javascript asp.net knockout.js

我有一个复选框和单击事件,用于更新数据的复选框.当我单击复选框时,数据正在更新,但未选中复选框.

这是我的HTML代码:

<td>
 <input type="checkbox" data-bind="checked: status, disable: status, click: $root.UpdateStatus" />
</td>
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

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);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

我希望我的复选框在点击时被检查.然后在点击复选框后放入更新的数据.

Wil*_*lem 24

请参阅:http://knockoutjs.com/documentation/click-binding.html

注3:允许默认单击操作
默认情况下,Knockout将阻止click事件采取任何默认操作.这意味着,如果您在标签(链接)上使用单击绑定,则浏览器将仅调用您的处理程序函数,而不会导航到链接的href.这是一个有用的默认值,因为当您使用点击绑定时,通常是因为您使用链接作为操纵视图模型的UI的一部分,而不是作为到另一个网页的常规超链接.

但是,如果您确实希望继续执行默认单击操作,则只需从单击处理函数返回true.


编辑:添加示例,显示在true函数中返回的位置.它必须从实际函数本身返回,而不是从Ajax successerror处理程序返回.

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;
};
Run Code Online (Sandbox Code Playgroud)