Javascript 与 jQuery : Click and double click on same element, 不同的效果,一个禁用另一个

标签 javascript jquery events event-bubbling propagation

我有一个有趣的情况 - 我有一个表行,当前,当我单击“展开”按钮时,它显示它是隐藏的对应行。包含展开按钮的原始(未隐藏)行在特定单元格中也有一些内容,单击该单元格后,这些内容将变为可编辑。我想摆脱展开按钮,并通过双击行本身的任意位置来展开行,包括单击它时变为可编辑的字段。你已经可以闻到这里的麻烦了。

当我双击一行时,在 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>

干杯

最佳答案

总体思路:

  1. 第一次点击时,不要调用相关函数(比如 single_click_function())。相反,为特定时间段(比如 x)设置一个计时器。如果我们在该时间跨度内没有再次点击,请使用 single_click_function()。如果我们确实得到一个,请调用 double_click_function()

  2. 收到第二次点击后,计时器将被清零。一旦 x 毫秒过去,它也会被清除。

顺便说一句,查看 Paolo 的回复:Need to cancel click/mouseup events when double-click event detected 当然还有整个线程! :-)

Better answer: https://stackoverflow.com/a/7845282/260610

关于Javascript 与 jQuery : Click and double click on same element, 不同的效果,一个禁用另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5471291/

相关文章:

javascript - 选择新选项时更新列表 - html/js

jquery - jquery中如何选择元素的祖 parent

events - 弹性3 : disable backspace and delete in a TextArea

.net - Win32中如何编码.NET事件Application.OnIdle?

javascript - 如何测试聊天网络应用程序

javascript - 检索用户添加到表中的数据

javascript - 什么时候使用 jQuery isImmediatePropagationStopped() 方法?

javascript - 如何在不重复的情况下附加或预先添加要在一页上多次使用的 div 文本?

javascript - 在 Javascript 中更改语法事件监听器

javascript - 在编写大量 JS 的 Web 应用程序时,我应该如何避免重复的 ID?