0

我在尝试确定是否在带有id=#blankElement.

事件处理程序可以很好地单击指定元素右侧或左侧的单元格,但如果单击任何其他单元格,我会收到“单元格在上方”警报。

$(function () {
    var $tbl = $('<table border="1">').attr('id', 'grid');
    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);
        }

        trow.appendTo($tbody);
    }

    $tbl.append($tbody);
    $('table').remove();
    $('body').append($tbl);
    $('#grid tr:first td:last').prev().text("");
    $('#grid tr:first td:last').prev().attr('id', 'blankElement');
});

// Event handler for clicking table cells
$('body').on('click', '#grid td', function(e) {

    if ($(this).closest('td').next("#blankElement").length){
        alert('Cell to the right');

    }else if ($(this).closest('td').prev("#blankElement").length){
        alert('Cell to the left');

    }else if ($(this).parent().next().children().eq($(this).index())){
        alert('Cell is above');
    }
});
4

1 回答 1

1

好了,伙计们,小提琴:http: //jsfiddle.net/yQk28/23/

您的代码有很多问题:

  1. eq() 就像一个选择器,将返回元素数组。当什么都不匹配时,它将返回 [],它的计算结果仍然为 true。

  2. 您正在选择所有子元素,而不仅仅是您要查找的元素(children() 充当 $() - 您可以传递其他选择器,它会为您过滤子元素)

看看小提琴它很简单

代码:

$('body').on('click', '#grid td', function(e) {

    if ($(this).closest('td').next("#blankElement").length) {
        alert('Cell to the right');

    } else if ($(this).closest('td').prev("#blankElement").length) {
        alert('Cell to the left');

    } else if ($(this).parent().next().children("#blankElement").index() == $(this).index()) {
        alert('Cell is above');
    }
});​
于 2012-05-01T22:18:48.973 回答