0

我有一个表格行,单击时会触发一个事件。行内有(未显示)复选框+其样式标签。

我想要的是防止(我猜是 :not 或 .not() 但无法弄清楚)如果单击复选框/标签则执行。

HTML:

<center>
<table>
    <tr class='pend'>
        <td><input type="checkbox" id="bb"/> <label for="bb">X</label></td>
        <td>&nbsp;</td>
        <td>some text</td>
    </tr>
</table>
</center>

CSS:

center {
margin-top:20px;
}

input[type=checkbox] + label {
    width:10px;
    height:10px;
    background-color:red;
}

input[type=checkbox] {
    display:none;
}

table tr {
height:40px;
    background-color:gray;
}

table td {
padding:5px;
}

JS:

$('.pend').on('click',function(){
    $(this).append('text');
    return false;
})

JSFIDDLE:http: //jsfiddle.net/ySuGB/2/

4

4 回答 4

2

您需要防止单击复选框/标签时事件冒泡。

见下文,

//                     V-- Is the TD containing the checkbox and the label.
$('.pend :checkbox').parent().on('click', function(event) {
    event.stopPropagation()
});

演示:http: //jsfiddle.net/ySuGB/12/

于 2012-09-14T21:42:34.870 回答
1

e.stopPropagation() 是您所需要的。

http://jsfiddle.net/jNDYJ/

$('.pend input:checkbox').add('.pend label[for=bb]').click(function(e){
    e.stopPropagation();
});
于 2012-09-14T21:43:35.517 回答
0

您可以检查事件目标是否为标签(等):

$('.pend').on('click',function(e){
  if(e.target.tagName=='LABEL')
    return false;
  $(this).append('text');
  return false;
})​

http://jsfiddle.net/ySuGB/9/

于 2012-09-14T21:43:00.000 回答
0
$('.pend').on('click',function(){
    var $this = $(this);
    $this.off('click');
    $this.find('td:eq(2)').append('text');
})​
于 2012-09-14T21:43:48.093 回答