【发布时间】:2011-07-25 04:26:32
【问题描述】:
我有一个有趣的情况 - 我有一个表格行,当前,当我单击“展开”按钮时,它显示它是隐藏的对应项。包含展开按钮的原始(未隐藏)行在某个单元格中也有一些内容,当单击这些内容时,这些内容变为可编辑的。我想摆脱展开按钮,并通过双击行本身的任何位置来扩展行,包括单击它时变为可编辑的字段。你已经可以闻到这里的麻烦了。
当我双击一行时,在 dblclick 发生之前首先触发两个单击事件。这意味着如果我双击该字段,它将变成一个可编辑的字段,并且该行将展开。我想防止这种情况。我希望双击以防止触发单击,并像往常一样执行单击。
使用 event.stopPropagation() 显然是行不通的,因为它们是两个不同的事件。
有什么想法吗?
编辑(一些半伪代码):
原版:
<table>
<tbody>
<tr>
<td><a href="javascript:$('#row_to_expand').toggle();" title="Expand the hidden row">Expand Row</a></td>
<td>Some kind of random data</td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[0]->value("First editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[1]->value("Second editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[2]->value("Third editable value") ?></td>
<!-- ... -->
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[n]->value("Nth editable value") ?></td>
</tr>
<tr style="display: none" id="row_to_expand">
<td colspan="n">Some hidden data</td>
</tr>
</tbody>
</table>
所需版本:
<table>
<tbody>
<tr ondblclick="$('#row_to_expand').toggle()">
<td>Some kind of random data</td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[0]->value("First editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[1]->value("Second editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[2]->value("Third editable value") ?></td>
<!-- ... -->
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[n]->value("Nth editable value") ?></td>
</tr>
<tr style="display: none" id="row_to_expand">
<td colspan="n">Some hidden data</td>
</tr>
</tbody>
</table>
干杯
【问题讨论】:
-
您可以尝试使用 setTimeout 延迟点击处理程序,然后在双击时引发“doubleclick-has-happened”标志,并在单击处理程序中检查该标志
-
@diEcho 完成! @freaktm 谢谢,我考虑过这一点,但它似乎不切实际和骇人听闻,特别是因为我必须修改我的可编辑单元格助手站点范围内的点击处理程序。我可能会将此作为最后的手段,是的,但仍然想知道是否有人有更好的解决方案。
-
如果你到了那里,我已经为你做了一个例子:jsfiddle.net/nslr/2TvgE 但是是的,不是很漂亮:)
-
嗯,试过了,好像没有按计划工作。当我双击时,我得到双击,当我单击时,我得到单击。但是当我双击后双击时,我得到了单击和双击:)
标签: javascript jquery events event-bubbling propagation