复选框点击事件未触发
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 而不是文本,因此没有看到反射值。它现在正在工作。感谢大家。
我的 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 而不是文本,因此没有看到反射值。它现在正在工作。感谢大家。