我有一个输入类型的按钮。按钮是这样的:
<h2>RFI Status Type</h2>
<input type="button" class="btn btn-small btn-primary" value="New RFI Status" data-bind="click: $root.createRFIStatusType" />
<hr />
<table class="search">
<tr class="table_title">
<th>RFI Status Type Name</th>
<th>Sequence</th>
<th>Active Status</th>
</tr>
<tbody data-bind="foreach: RFIStatusTypes">
<tr class="table_data">
<td><a data-bind="text: RFIStatusTypeName, click: $parent.editRFIStatusType">Edit</a></td>
<td data-bind="text: Sequence"></td>
<td>
<input type="button" id="chkActiveStatus" data-bind = "value: activeStatus(ActiveStatus) "/>
</td>
</tr>
</tbody>
</table>
JavaScript函数activeStatus(ActiveStatus)
是:
<script>
function activeStatus(ActiveStatus)
{
if (ActiveStatus == 0) {
return "Deactivate";
}
else {
return "Activate";
}
}
</script>
它正在做的是,它取的是ActiveStatus的值,它是我数据库表中的一列。 ActiveStatus的值为1或0.当值为0时,它将按钮的值返回为“Deactivate”,否则为“Activate”。
单击按钮时,我想将按钮值从“激活”更改为“取消激活”,反之亦然,同时相应的ActiveStatus值也会更改。如果ActiveStatus为0,则它将变为1;如果它是1那么它将变为0.
我该怎么做?我多次尝试过这次但都失败了。我在输入中尝试了一个onclick事件,但它没有用。
编辑-1:我在我的视图页面中编写了JavaScript代码,并对其进行了一些修改,但仍未获得所需的结果。在这里:
<script>
function activeStatus(ActiveStatus)
{
if (ActiveStatus == 0) {
ActiveStatus++;
return "Deactivate";
}
else if (ActiveStatus == 1)
{
ActiveStatus--;
return "Activate";
}
}
</script>
EDIT-2:很多人提到我没有在这里包含knockout.js代码。所以这是RFIStatusType.js代码:
var RFIStatusTypesViewModel = function () {
var self = this;
var url = "/RFIStatusType/GetAllRFIStatusType";
var refresh = function () {
$.getJSON(url, {}, function (data) {
self.RFIStatusTypes(data);
});
};
// Public data properties
self.RFIStatusTypes = ko.observableArray([]);
// Public operations
self.createRFIStatusType = function () {
window.location.href = '/RFIStatusType/RFIStatusTypeCreateEdit/0';
};
self.editRFIStatusType = function (RFIStatusType) {
window.location.href = '/RFIStatusType/RFIStatusTypeCreateEdit/' + RFIStatusType.RFIStatusTypeID;
};
self.removeRFIStatusType = function (RFIStatusType) {
// First remove from the server, then from the UI
if (confirm("Are you sure you want to delete this RFI Status?")) {
var id = RFIStatusType.RFIStatusTypeID;
$.ajax({ type: "DELETE", url: 'RFIStatusType/DeleteRFIStatusType/' + id })
.done(function () { self.RFIStatusTypes.remove(RFIStatusType); });
}
}
refresh();
};
ko.applyBindings(new RFIStatusTypesViewModel());
EDIT-3:现在我的按钮是这样的:
<input type="button" id="chkActiveStatus" data-bind="value: activeStatus(ActiveStatus), click: toggleActiveStatus(ActiveStatus)" />
我的JavaScript重写在这里:
<script>
function activeStatus(ActiveStatus)
{
if (ActiveStatus == 0)
{
alert("ActiveStatus is now 0");
return "Activate";
}
else if (ActiveStatus == 1)
{
alert("ActiveStatus is now 1");
return "Deactivate";
}
}
function toggleActiveStatus(ActiveStatus)
{
if (ActiveStatus == 0)
{
ActiveStatus++;
alert("ActiveStatus is now 1");
return ActiveStatus;
}
else if (ActiveStatus == 1)
{
ActiveStatus--;
alert("ActiveStatus is now 0");
return ActiveStatus;
}
else alert("Error");
}
</script>
但仍然没有运气。
答案 0 :(得分:1)
由于Govan似乎是最正确的,你不能只在挖掘的数据绑定概念中获取全局函数。 'value'只会设置按钮的值......这不是真正相关的。 data-bind ='click:activeStatus'是你想要处理click事件的方式......但是需要声明函数activeStatus(),你声明定义每个RFIStatusTypes实例的对象类型。
提供更多的淘汰代码,这个例子可能会神奇地显示更多信息。
就个人而言,我闻到了自定义bindingHandler的一个很好的例子。