0

我在检索单击的表格单元格的文本时遇到了一些麻烦,我可以让事件触发的唯一方法是将“tbody td”替换为

$("body").click(function(e) {

但这不会为单击的单元格返回正确的数据值。有谁知道我可能做错了什么?我需要使用 jQuery 创建表,以便可以根据表单给出的输入动态调整其大小。

$(document).ready(function() {
    $('#selection').submit(function() {
        $(function () {

            var $tbl = $('<table border="1">').attr('id', 'table');
            var $tbody = $('<tbody>').attr('id', 'tableBody');

            for (var i = 0; i < $("#numOfPieces").val(); i++) {
                var trow = $("<tr>"); // New row

                for (var j = 0; j < $("#numOfPieces").val(); j++) {
                    $("<td>")
                            .text('Row : ' + i + ', Col: ' + j)
                            .appendTo(trow); // New data cell
                }
                trow.appendTo($tbody);
            }

            $tbl.append($tbody);
            $('table').remove(); // Remove previously created table
            $('body').append($tbl);
        });
        return false;
    });

    $("tbody td").click(function(e) {
        var currentCellText = $(this).text();
        var LeftCellText = $(this).prev().text();
        alert(currentCellText);
    });
});
4

1 回答 1

3

问题是您的点击处理程序绑定到 EXISTING 表。您需要将其绑定到“任何”表。在文档准备功能中:

$('.container').on('click', 'td', function(e) {
  var currentCellText = $(this).text();
  // etc
});

.container预计不会被破坏的任何容器包装元素在哪里。让它成为你能做到的最接近的祖先。如果没有可用的候选人,那么您可以使用body,但如果可以的话,我会避免这么高。

td如果需要,当然可以将选择器修改为更具体。如果您有一种应该存在此行为的表类型,请忘记 ID 并为该类型的表指定一个类。然后td只是变成.someClass td了。

您可能还想在尝试使用之前清理您的 LefCellText 是否存在。以你拥有它的方式声明变量是好的(如果没有这样的选择器,它就会变成未定义的)但你不想假设你将拥有内容,你会想要创建一个后备计划。

于 2012-04-29T00:31:21.800 回答