2013-11-01 55 views
0

我有一个按钮在表像这样Knockoutjs查找表点击按钮的ID

<tbody data-bind="foreach: Items"> 
    <tr data-bind="css: { alt: $index() % 2 }"> 
     <td style="width: 60%;" data-bind=" html: ItemName"></td> 
     <td data-bind=" html: Quantity"></td> 
     <td style="align-items: center; text-align: center;"> 
      <input id="btnReady" type="button" value="Ready" class="button" data-bind="click: readyItem " /></td> 
    </tr> 
</tbody> 

和我的看法是这样的

function MenuItem(data, hub) { 
var self = this; 
data = data || {}; 

// Persisted properties 
self.Id = data.Id; 
self.ItemId = data.ItemId; 
self.OrderId = data.OrderId; 
self.ItemName = ko.observable(data.ItemName || ""); 
self.Quantity = ko.observable(data.Quantity || ""); 
self.Notes = data.Notes || ""; 
self.Status = data.Status; 
self.error = ko.observable(); 

self.hub = $.connection.postHub; 

self.readyItem = function() { 
    self.hub.server.itemReady(self.ItemId, self.OrderId).done(function() { 
     $('#btnReady').attr('disabled', 'disabled'); 
    }).fail(function (err) { 
     self.error(err); 
    }); 
}} 

当我点击上面的按钮,然后总是第一个按钮表已禁用。 如何禁用点击的人。请帮忙。

回答

0

尝试用它来取代readyItem处理程序:

self.readyItem = function (data, event) { 
    self.hub.server.itemReady(self.ItemId, self.OrderId).done(function() { 
     $(event.target).attr('disabled', 'disabled'); 
    }).fail(function (err) { 
     self.error(err); 
    }); 
}} 

此外,IDS都意味着是一个页面上独一无二的。如果您有多个包含按钮的行,请不要对它们全部使用#btnReady标识。使每个按钮的ID唯一,或使用一个类。

+0

谢谢@ pax162这是工作。 –

1

使用Knockout的disable绑定而不是手动操作DOM。

在每个项目中,self.readyItem添加

self.isReady=ko.observable(false); 

,与

self.isReady(true); 
在HTML

更换DOM操作,添加

disable: isReady 

器上的数据的<input>结合,并删除id属性。