2014-09-11 277 views
5

我正在用JQuery创建动态HTML表格。示例代码如下。禁用JQuery禁用HTML表格元素禁用<TR>

var tbody=$("#myTable tbody"); 

var tableRow; 

if(somevariableIsTrue) 
    tableRow=$("<tr>").attr("disabled",true); 
else 
    tableRow=$("<tr>"); 

var td=$("<td>"); 
    td.appendTo(tableRow); 

var tdn=#("<td>"); 
tdn.appendTo(tableRow); 

tableRow.appendTo(tbody); 

现在我创建不同的TD并追加到tableRow。如果该行的禁用属性为TRUE,那么该行的所有TD也将被禁用。但我希望我的第一个禁用行的TD不应该被禁用,因为它的点击复选框列我想要启用/禁用同一行。我尝试了不同的方法来获得第一列中的复选框,并试图启用它,但都失败了。有人建议我如何做到这一点在JQuery中

编辑 希望这个屏幕截图有助于理解我的要求 enter image description here

所看到的图像的第一行中被禁止,包括使用复选框首款TD。我希望复选框列始终处于启用状态,以便在检查该行时变为启用并取消选中将该行再次禁用。

+5

工作的'tr'元素没有一个'disabled'属性。如果你想在'tr'中禁用输入,你需要单独添加属性给它们。 – 2014-09-11 08:41:31

+0

它与tr一起工作,并根据需要禁用该tr中的所有其他元素。我不想迭代每个td来启用禁用元素,所以我选择了这种方法。 – 2014-09-11 08:43:59

+0

你还应该考虑一个轻量级模板引擎。 – Blowsie 2014-09-11 08:44:59

回答

0

你可以只调用

$('input[type=checkbox]').removeAttr('disabled'); 

$('input[type=checkbox]').prop('disabled', false); 
在所有的复选框

。这将从根本上重新启用所有的复选框

2

这里有一个简单的解决方案:

// first row checkboxes 
$('tr td:first-child input[type="checkbox"]').click(function() { 
    //enable/disable all except checkboxes, based on the row is checked or not 
    $(this).closest('tr').find(":input:not(:first)").attr('disabled', !this.checked); 
}); 

看本JSFiddle