难以改变动态生成的表格单元格背景onclick

时间:2014-02-28 21:10:16

标签: javascript jquery html css

我正在制作一位像素艺术画家,这太令人费解了。

到目前为止,我有一个基于用户指定的“行”和“列”数量动态生成的表这种方法非常好(虽然它似乎不适用于JSFiddle,但我可以保证你确实可以在网页上工作,你可以在我的测试中看到site)。

我现在想要完成的事情可以在fiddle中看到 非常直接,试图改变“TD”标签的css onclick。

我似乎无法使用动态生成的表来使用该功能。

以下是我目前正在尝试的内容(JSFiddle

HTML:

Row Count:<input type="text" id="rowcount" />
Column Count:<input type="text" id="columncount" />
<input type="button" onclick="createTable();" value="Create Table" />
<div id="box"></div>

CSS:

table{
    width:500px;
    height:500px;
}
td{
    padding:10px;
    margin:10px;
    border:1px solid #ccc;
}
.active {
    background-color:#aaa;
}

JS / jQuery的:

function createTable() {

mytable = $('<table></table>').attr({
    id: "basicTable"
});
var rows = new Number($("#rowcount").val());
var cols = new Number($("#columncount").val());
var tr = [];
for (var i = 0; i < rows; i++) {
    var row = $('<tr></tr>').attr({
        class: ["class1", "class2", "class3"].join(' ')
    }).appendTo(mytable);
    for (var j = 0; j < cols; j++) {
        $('<td></td>').text("text1").appendTo(row);
    }

}
console.log("TTTTT:" + mytable.html());
mytable.appendTo("#box");


}

$(function () {
    $('td').click(function () {
        $(this).toggleClass('active');
    });
});

非常感谢任何帮助或建议。

2 个答案:

答案 0 :(得分:4)

是的,它不起作用。由于整个table已动态创建,因此它们未附加到document(即。The problem with dynamically created elements, is that they aren't born with the same event handlers as the existing elements.)。

所以你必须去附加到文档的事件委托。

$(function () {
    $(document).on('click', 'td', function () {
        $(this).toggleClass('active');
    });
});

JSFiddle

希望你理解。

答案 1 :(得分:2)

在创建“td”之前,您将绑定“td”。将'td'添加到DOM后,在createTable()方法中单击绑定。

function createTable()
{
    // your code

    $('td').click(function () 
    {
        $(this).toggleClass('active');
    });
}

添加jsfiddle链接。 http://jsfiddle.net/y94K8/4/