2

我正在使用 mvc4 和 jquery。

我正在尝试找到一种方法来使整行触发双击事件。

我的场景是,包含参数 Person ID、FirstName 和 Lastname 的模型。

但 html 表只显示 FirstNmae 和 Lastname。

在哪里存储人员 ID,如果它隐藏它也不会进入 javascript 和空间问题。

我的需要是使行可双击,然后获取 personID,其次是对最终用户隐藏人员 ID。

为了获得我使用的personid,

$('#EditTable td').dblclick(function () {
    $(this).find('td:eq(1)')
    $(this).find('td:first').text()
}

但没有得到任何价值。

4

5 回答 5

8

解决方案

问题是事件正在为td元素触发,因此this指的是td元素。您需要获取父级tr,然后调用该find函数。

像这样的东西:

$('#EditTable td').dblclick(function () {
    var $this = $(this);
    var row = $this.closest("tr");
    row.find('td:eq(1)');
    row.find('td:first').text();
}); //<-- NOTE: you dont close correctly in your example, which cause console errors

这是一个工作示例。


或者,您可以将事件分配给tr元素,这将允许您保留原始功能代码...

$('#EditTable tr').dblclick(...

就个人而言,我更喜欢使用data属性存储“元数据”类型的东西。例如:

$('#EditTable td').dblclick(function () {
    var $this = $(this);
    var row = $this.closest("tr");
    var id = row.data("id");
});

使用以下 html 表:

<table id="EditTable">
    <tr data-id="1">
        <td>1</td><td>One</td>
    </tr>
</table>

这是一个使用数据属性的工作示例。

于 2013-03-04T10:30:16.047 回答
1

实际上,您可以使用方法将模型详细信息存储在 DOM 树中$.data('personID',1)。这样,您可以personID对用户隐藏。当用户dbl点击一行时,得到对应的personIDlike$.data('personID')

//setting the personID
$.data('personID',2);

//getting the personID
$.data('personID'); //returns 2
于 2013-03-04T10:36:36.657 回答
0

你必须写:

// You want event fired on row `tr` and not on `td`
$('#EditTable tr').dblclick(function () {
    $(this).find('td:eq(1)')
    $(this).find('td:first').text()
}

编辑

最好的方法是:

$('#EditTable').on(dblclick, 'tr', function () {
    var $rowClicked = $(this);
    var secondCell = $rowClicked.find('td:eq(1)');
    var textOfFirstCell $rowClicked.find('td:first').text();
}
于 2013-03-04T10:30:37.873 回答
0

试试这个

$('#EditTable tr').dblclick(function () {
  var $this=$(this);
  $this.find('td:first').text(); //get personid
  $this.find('td:first').hide(); //hide the personrow... u can use remove()
});
于 2013-03-04T10:31:06.197 回答
0

试试这个:

 $('#EditTable tr').dblclick(function () {
   $(this).find('td:eq(1)')
   $(this).find('td:first').text()
 });

尝试进行迭代TRs,这可能是一个错字,或者你在关闭时遇到的错误应该是});

于 2013-03-04T10:34:10.190 回答