我为一个函数构建了一个jQuery选择器,如下所示:
$('html').not('.table-main tr[selected]').mousedown( function( e ) {
但不知何故它根本没有过滤,我不太明白为什么。 即使我只是为选择器留下('。table-main'),我仍然会在点击表格时触发该功能......这有什么问题?
使用文档或'正文'而非'html'无效,因为文档根本没有触发.not( )和'身体'的结果相同。
编辑: 刚尝试使用表外的另一个块,它的工作原理。我有可能不能在桌子上使用它吗?
Update2:根据要求,这是表格的渲染html代码:
<table border="0" cellspacing="2px" cellpadding="5px" class="table-main">
<tr id="tablefields">
<th style="padding: 0;">
<table cellpadding="0" cellspacing="0" border="0" align="center">
<tr><th><div class="tr-head-get" id="tr-get-0">Name</div></th></tr>
<tr><th><div class="th-header" id="th-header-0" style="top: 54px;">Name</div></th></tr>
</table>
</th>
<th style="padding: 0;"></th>
</tr>
<tr id='table_form_new_device' class='table_form_class'>
<form accept-charset="UTF-8" action="/devices" class="new_device" data-remote="true" id="new_device" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="T2dSeZpxxvgJdTP+yoE7BrVODzqJ95gyVu9Wh/v7oP8=" /></div>
<th class='tablefield'>
<input id="device_devicename" name="device[devicename]" size="10" type="text" />
</th>
<th>
<div class='submitbox' id='submitbox_new_device'>S</div>
<script>
$('#submitbox_new_device').click(function (event) {
$('#new_device').submit();
});
</script>
</th>
</form></tr>
</table>
<div class="dropdown-button" style="margin: 0 2px;">Filter</div>
答案 0 :(得分:3)
您真的非常希望使用委托事件处理,因为您不希望将事件处理程序附加到文档中的每个元素。您希望在文档级别拦截冒泡事件,并检查mousedown是否来自不是表中所选行的元素。
此外,tr[selected]
似乎不太可行。我认为您需要在所选行中添加一个类"selected"
,然后使用tr.selected
作为选择器。
如果你做了那个改变,我会建议像这两个选项中的一个:
$(document).mousedown(function(e) {
if (!$(e.target).is('.table-main tr.selected')) {
// mouse down and it wasn't in a selected row of your table)
}
})
您也可以让jQuery委派进行更多工作:
$(document).on('mousedown', ':not(.table-main tr.selected)', function() {
// mouse down and it wasn't in a selected row of your table)
});
在看到您的实际HTML后,如果我正确理解了问题,这应该可行。只要该点击不在table-main
的{{1}}类中,就会在发生点击时为您提供一个事件:
selected
答案 1 :(得分:2)
使用[selected]
对tr
类型的元素没有意义。您使用选定的输入(checkbox,radio
)。您可以在.selected
中的tr元素中添加一个类.table-main
,然后使用:
编辑:就像上面发布的人一样,你想要选择嵌套在体内的元素。
$('body').find(':not(.selected)').mousedown(function(e){})
答案 2 :(得分:1)
$('html')
创建一个包含HTML元素的jQuery对象。
.not('.table-main tr[selected]')
删除任何具有所选属性的TR元素(此处存在错误,该属性不会出现在TR上),这些属性来自属于table-main
类成员的元素。由于HTML元素不是TR元素,不能是任何元素的后代,因此不会删除任何元素,也不会产生任何影响。
mousedown( function( e )
将事件处理程序绑定到HTML元素。除非某些东西停止传播,否则任何点击都会最终冒泡到那里。
我猜测(因为你实际上没有说出你想要实现的目标),你想要捕获未被选中的TR元素的点击。假设您切换到使用类来使HTML有效...
$('.table-main tr:not(.selected)').mousedown(…);
和
<tr class="selected">