1

我有一系列带有表格数据的嵌套表。这些表有 3 层深,因此有一个主表保存整个事物的结构,一些中间表保存主表的部分,以及包含实际数据的数据表。

这个想法是,当一个元素注册一个键事件时,将对注册该键事件的数据行进行计算。

数据表的结构大致如下:

<table id="someDataTable">
    <tbody>
        <tr>
            <td >Some Title</td>
            <td >Units</td>
            <td >Val/Unit</td>
            <td >Value</td>
        </tr>
        <tr>
            <td><input type="text" size="30" /></td>
            <td><input type="text" size="14" class="units"/></td>
            <td><input type="text" size="14" class="value"/></td>
            <td><input type="text" size="14" readonly="readonly" class=total"/></td>
        </tr>
...
    </tbody>
</table>

当然,表 id 是唯一的。

粗略的想法是“单位*值=总计”在许多行中(它们是按需动态生成的,但我认为这不重要)。

使这成为可能的想法是使用以下方法捕获主表中的所有按键:

function initialize() {
    $(document).on('keypress', '#tblMasterTable', DoMathForRow);
}

然后调用一个可以对所有数据表进行数学运算的通用函数。这个想法是用“这个”作为识别的手段......

function DoMathForRow() {

    tKeyedBox = this;

    //Do Things Here
}  

基本上,我希望'this'会返回输入的输入框,所以我可以有效地说

tKeyedBox.parent().parent()

如果有按键事件,则可以访问确切的行。从那里可以很容易地完成其余的工作。

但是,'this' 返回整个主表,这是非常不幸的。

然后我的问题如下:如何检索出现按键事件的输入框(或单元格或行——绝对识别的东西)。

我对 jQuery 很陌生,所以我在很好地构建我的选择语句方面相当平庸,我觉得这可能是一个过去可能已经回答过的简单问题,但我无法获得我正在寻找的信息其他问题。谢谢你的耐心!

4

1 回答 1

3

在您的选择器中更深入地挖掘一个级别,并且仅在按下某个按键时才注册按键input

$(document).on('keypress', '#tblMasterTable input[type="text"]', DoMathForRow);

this现在将引用您的input,而不是您的表。

于 2013-06-12T17:02:05.537 回答