1

没有所有代码就很难解决奇怪的间歇性问题,但这里(我越来越绝望):

我有一个使用数据表的 HTML 表:

$('#DatagridTable').dataTable({ 
    'sPaginationType': 'full_numbers',
}); 

我有一个表格的 jQuery click 事件,它将点击行中第一个单元格的内容发送到表单,然后提交表单。这是功能:

//  On row click, go to single-view page
$('.c_grid_tr').click(function() {  
    var equipID = $(this).find('td:first').text();
    //  Fill hidden text box on form with value to post
    $('#singleRowID').val(equipID);
    //  Post form
    $('#formEquipment').submit();
});

在我使用 Datatables 的任何导航功能(转到另一个页面、排序、更改显示的记录数)之前,单击功能可以正常工作。但是在执行了这些操作之后,我的点击事件只是偶尔起作用,似乎在随机行上。我查看了 HTML 源代码,但是单击事件起作用的行和不发生单击事件的行是相同的。下面是在 Firefox 中呈现的两行示例:

<tr class='c_grid_tr'>
    <td style='display:none;'>817</td>
    <td class='c_grid_td'>Ground Optic #1</td>
    <td class='c_grid_td'>Zeiss</td>
    <td class='c_grid_td'>950</td>
    <td class='c_grid_td'>DTY</td>
    <td class='c_grid_td'>Storage Facility</td>
    <td class='c_grid_td'>Y</td>
</tr><tr class='c_grid_tr'>
    <td style='display:none;'>818</td>
    <tdclass='c_grid_td'>Ground Optic #1</td>
    <td class='c_grid_td'>Zeiss</td>
    <td class='c_grid_td'>950</td>
    <td class='c_grid_td'>DTZ</td>
    <td class='c_grid_td'>Storage Facility</td>
    <td class='c_grid_td'>Y</td>
</tr>

第一行响应点击事件。第二个没有,只有在我排序、更改页面或更改显示记录数后才会出现此问题。我在我的点击事件中放置了一个警告框,但它不会触发,所以我知道点击第二行时甚至没有激活点击事件。

与往常一样,感谢您提供任何有关主题的建议。

4

2 回答 2

2

问题很可能是某些列包含在第一次加载中(当点击事件被绑定时),但在后续加载中,您不会重新加载整个页面,只是重新加载表格,因此事件不会反弹到新的元素。

我认为,您将要取消绑定并重新绑定抽签上的事件,即:

"fnDrawCallback": function (oSettings) {
    $('.c_grid_tr').unbind();
    //  On row click, go to single-view page
    $('.c_grid_tr').click(function() {  
        var equipID = $(this).find('td:first').text();
        //  Fill hidden text box on form with value to post
        $('#singleRowID').val(equipID);
        //  Post form
        $('#formEquipment').submit();
    });
}
于 2012-11-29T23:33:44.117 回答
1

尝试使用 javascript onclick 函数调用内联并传递元素,例如:

<tr onclick="updateRow(this)">

如果您需要 tr 的唯一选择器并控制输出,请使用 id 或记录 id 的索引,例如:

<tr id="[create in the output]">
于 2012-11-29T23:36:22.350 回答