仅在某些行上绑定事件

时间:2016-06-03 13:30:36

标签: javascript jquery javascript-events

实际上,我在表的所有tr上绑定了一个dblclick事件

$('#memberPaymentTableResult tr').bind("dblclick", null, memberPaymentSelectedRow);

我桌子的结构

<tr>    
    <td data-payment-id={{paymentId}}>{{paymentId}}</td>
    <td data-contract-id={{contractId}}>{{contractId}}</td>
    <td>{{replace price "." ","}}</td>
    <td>{{moment date "L"}}</td>
    <td data-status={{status}}>
</tr>

是否可以仅在data-status!= COMPLETED的行上绑定dblclick事件?

3 个答案:

答案 0 :(得分:1)

一个解决方案是:

您可以在创建html时为所有已完成数据状态的tr添加公共类。因此您可以直接从该类定义dblclick事件

第二个解决方案:

在dblclick事件中,您可以检查数据状态是否已完成,然后返回false;

答案 1 :(得分:1)

:has() selectornot attribute selector一起使用,并使用事件委派添加更少的事件

$("#memberPaymentTableResult").on("click", 'tr:has(td[data-status!="COMPLETED"])', function () {
    $(this).toggleClass("selected");
});
.selected td { background-color: yellow; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="memberPaymentTableResult">
  <tbody>
    <tr>
      <td data-status="xxxx">No</td>
    </tr>
    <tr>
      <td data-status="COMPLETED">Yes</td>
    </tr>
    <tr>
      <td data-status="COMPLETED">Yes</td>
    </tr>
    <tr>
      <td data-status="xxxx">No</td>
    </tr>    
  </tbody>
</table>

答案 2 :(得分:0)

试试这个..

$('#memberPaymentTableResult tr[data-status!="COMPLETED"]').bind("dblclick", null, memberPaymentSelectedRow);