Javascript 与 jQuery:单击和双击同一元素,不同的效果,一个禁用另一个

2023-11-21

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

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

Cheers


总体思路:

  1. 第一次单击时,不要调用关联的函数(例如 single_click_function())。相反,设置一个计时器一段时间(比如x)。如果我们在这段时间内没有再次点击,请使用 single_click_function()。如果我们确实得到了一个,请调用 double_click_function()

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

顺便说一句,查看 Paolo 的回复:检测到双击事件时需要取消单击/鼠标事件当然还有整个线程! :-)

更好的答案:https://stackoverflow.com/a/7845282/260610

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 与 jQuery:单击和双击同一元素,不同的效果,一个禁用另一个 的相关文章

随机推荐

  • Keycloak https auth页面无法访问

    我生成了自签名域证书 然后启动了Keycloak docker run name keycloak e KEYCLOAK ADMIN admin e KEYCLOAK ADMIN PASSWORD password e KC HTTPS C
  • 通过更改 C++ 内存来损坏计算机的风险

    我了解一些 Java 现在正在尝试 C 显然在 C 中 您可以执行诸如声明大小为 6 的 int 数组之类的操作 然后更改该数组的第 10 个元素 我理解它只是后面的第 4 个字节为 6 整数数组分配的内存部分的末尾 所以我的问题是 如果我
  • 计算字符串中每个字母的频率

    这是来自 pyschools 的问题 我确实做对了 但我猜会有一个更简单的方法 这是最简单的方法吗 def countLetters word letterdict for letter in word letterdict letter
  • 为单独的 g_main_loop 添加回调

    我对如何做有一些误解GMainLoop工作 主要的事情 添加一些回调的 APIg main loop like g timeout add seconds 不要将指针指向要添加该回调的循环 看来您为所有人添加了回调g main loop实例
  • 我如何处理承诺的错误?

    作为节点程序员 我习惯使用 nodebacks 来处理代码中的错误 myFn param function err data if err error handling logic else business logic 编写该函数时 我可
  • 如何在 Windows 8 上的 Web 视图中捕获导航事件?

    我的应用程序中有一个 Webview 我想拦截任何点击并在 IE 中打开链接 而不是在应用程序的 Webview 内 我只能看到 NavigationFailed 和 LoadingComplete 事件 没有任何关于我可以拦截的 即将导航
  • 如何防止在打开特定链接时从 Ubuntu chrome 弹出 xdg-open 对话框?

    我正在尝试使用桌面网络 Whatsapp chrome ubuntu 加入 Whatsapp 群组 当我单击 加入组 时 它会显示下面的对话 我想从 chrome 中永远删除此对话 在关闭 xdg open 对话框后 我可以通过再次单击加入
  • 验证关联对象的最大数量

    我有一个帐户模型和一个用户模型 class Account lt ActiveRecord Base has many users end class User lt ActiveRecord Base belongs to account
  • 如何解决 RTCIceServer.url 已弃用!使用网址代替?

    我用socket io安装了node js 想要在服务器节点 server js 上测试这段代码 var static require node static var http require http Create a node stat
  • echo $PATH 与 .bash_profile 不匹配

    我正在尝试在 Mountain Lion 上安装自制程序 以便可以安装 Ruby 1 9 3 经过多年只使用 PHP 编程后 我终于开始转向 Rails Git 等 无论如何 我使用的是别人给我的笔记本电脑 因此 我的登录账号不是原来的账号
  • 复制 Ruby 字符串数组

    arr red green yellow arr2 arr clone arr2 0 replace blue puts arr inspect puts arr2 inspect 产生 blue green yellow blue gre
  • 如何从 Tensorflow 中预取的数据集中提取类以获得混淆矩阵

    我试图使用以下代码为图像分类器绘制混淆矩阵 但收到错误消息 PrefetchDataset 对象没有属性 classes Y pred model predict validation dataset y pred np argmax Y
  • Eclipse Juno 中没有“运行”菜单或工具栏按钮

    我正在尝试遵循 Android 开发教程 此页面 http developer android com training basics firstapp running app html 我被卡住了 我无法运行该应用程序 说明显示 打开项目
  • 如何使用 PyCrypto 添加/更改 RSA 私钥的密码

    也许有人能帮助我 我正在使用 PyCrypto 生成一对 RSA 密钥 公钥和 私钥 我尝试添加 更改私钥密码 但我不知道如何操作 做吧 这是我的一段代码 encoding utf 8 from Crypto PublicKey impor
  • Android Listview 每行有不同的布局?

    我想创建列表视图 其中我希望所有不同的行都有不同的布局 那么如何创建自定义适配器来为不同的行设置不同的布局 任何帮助将不胜感激 先感谢您 你需要延长你的Adapter 并覆盖其getView method Override public V
  • 如何在shell脚本中查找Mongodb是否以auth模式运行?

    我正在运行一个 mongodb 实例 它在我的服务器计算机上运行身份验证模式 目前我正在使用 shell scipt 来获取 mongodb 实例是否正在运行 如何检查 mongodb 是否在身份验证模式或非身份验证模式下运行 如果您只是想
  • 批处理文件:从目录读取文件名并存储在数组中

    我正在创建一个批处理文件 在其中需要列出指定文件夹的所有文本文件名 然后从数组中存储和检索相同的文本文件名 可以在批处理文件中吗 我当前列出测试文件的代码如下 dir txt b 任何帮助深表感谢 模拟阵列 字符串是批处理文件中唯一的变量类
  • paypal 沙箱无法处理请求

    我一直在工作和测试贝宝使用的沙箱系统 这很令人困惑 我创建了一些测试帐户 目前我已经从我的网站创建了一个表单 立即购买 按钮 它按其应有的方式工作
  • Celery:启动时启动任务

    我有一个任务需要在 Celery 启动时启动 接下来 该任务将通过回调 eta 每 5 分钟运行一次 我找到了一些关于它的线程 但似乎没有任何内容可以在 Celery 3 上工作 感谢您的帮助 阿诺 Celery 的 IRC 频道上的某人通
  • Javascript 与 jQuery:单击和双击同一元素,不同的效果,一个禁用另一个

    我有一个有趣的情况 我有一个表行 当前 当我单击 展开 按钮时 它显示它的隐藏对应项 包含展开按钮的原始 未隐藏 行在某个单元格中也有一些内容 单击该单元格后 这些内容将变为可编辑 我想摆脱扩展按钮 并通过双击行本身的任意位置来扩展行 包括