复选框点击事件未触发

Checkbox click event not firing

我的 ASP .Net 页面有一个从 AJAX 加载的中继器。这个 AJAX 页面转发器有一列复选框。中继器在 html table.

<input id="chkOptionSelected" runat="server" enableviewstate="false"
type="checkbox" data-bind="click: Add" />

在主页上,我有一个标签,其值由 JavaScript 函数计算。我的视图模型:

function VM() {
    var self = this;
    self.totalSqft = ko.observable(TotalSqFt);
    self.Add = function () {
        self.totalSqft(TotalSqFt);
        return true;
    }; 
}
ko.applyBindings(new VM());

TotalSqFt 是一个全局变量。标签是:

<asp:Label ID="lblTotalSqFt" runat="server" ClientIDMode="Static" data-bind="text: totalSqft"></asp:Label>

点击事件在 javascript 函数中计算新的总数。视图模型需要做的就是用新值更新标签。

我做错了什么?是因为复选框在 AJAX 内容中吗?我可以在查看源代码中看到这一切。

您的问题的直接原因很可能是 asp:Label 上的 data-bind 未呈现。您需要致电 Attributes.Add or something similar 来添加它。

话虽如此,您正在以一种可能抵消使用 KO 获得的优势的方式混合使用 Webforms 和客户端重技术(如 KnockoutJS),或者更糟的是会导致很多不方便的情况,例如您遇到的情况现在有。我建议要么从 asp 控件转移到更多面向 html 的控件(就像您对第一个 input 标记所做的那样),要么放弃 KO 以支持其他更简单的客户端技术(无论如何,这似乎更合适,因为您目前仅使用 KO 来处理点击,而它主要擅长双向数据绑定任务。

如@Jeroen 所说,asp:Lable 将由服务器处理并在客户端以不同方式呈现。

所以您可以使用普通的 html label 并使用 runat="server" 如果您想在服务器

上访问它

检查这个工作演示 http://jsfiddle.net/91mek1tk/

为您的 javascript 函数试试这个:

function VM() {
    var self = this;
    self.totalSqft = ko.observable("totalSqft");
    self.Add = function () {
        self.totalSqft("totalSqft");
        return true;
    }; 
}
ko.applyBindings(new VM());

谢谢你,JAG。我调整了演示并让它工作。我在其中一行中为我的标签使用了 val 而不是文本,因此没有看到反射值。它现在正在工作。感谢大家。