首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery:解除绑定dblclick,然后再次绑定

问jQuery:解除绑定dblclick,然后再次绑定
EN

Stack Overflow用户
提问于 2016-08-11 19:41:42
回答 3查看 1.5K关注 0票数 0

我有一个包含不同数据库查询结果的表。每个td都有一个id和一个onDblClick属性,如下所示:

代码语言:javascript
复制
<td id="Vorname_2036" onDblClick="makeForm(this.id)">
    Mark
</td>

不要介意函数的名称,它并不是一个真正的表单。相反,它将td的内部HTML更改为可编辑的文本输入,并且onChange向脚本发送AJAX请求,该脚本使用更改后的文本输入的值更新数据库。所有这些都像它应该的那样工作。唯一的问题是:在第一次双击之后,我想禁用dblclick,这样用户就不会双击文本输入。我也做到了这一点。但是在完成所有操作之后,我想恢复onDblClick属性。这就是我被卡住的地方。

下面是代码(被注释掉的部分是明显错误的部分):

代码语言:javascript
复制
function makeForm(id){
    $("#"+id).prop('ondblclick', "");
    sHtml=$("#"+id).html();
    $("#"+id).html("<input type=\"text\" id=\"t_"+id+"\" value=\""+sHtml+"\">");
    $("#"+id).change(function(){
        var content = $("#t_"+id).val();
        $("#"+id).html("<img src=\"icons/spinner.gif\" align=\"right\" width=\"20\" height=\"20\">");
        $.get("includes/query_update.php",{
            id:id,
            content:content
        },
        function(data){
            $("#"+id).html(data);
/*
            $("#"+id).dblclick(
                function(){
                    makeForm(this.id);
                }
            );
*/
        });
    });
}

提前感谢!

马丁

EN

回答 3

Stack Overflow用户

发布于 2016-08-12 00:20:17

你有没有试过改变解绑方法?因为当您重新绑定事件时,注释中描述的事件看起来仍然是绑定的(基本上,每次单击按钮时,都会将函数绑定到相同的事件)。在JQuery中,如果你多次绑定一个事件,它也会被多次执行。我的感觉是你解绑它的方式是不正确的。您现在这样做是在删除DOM (实际的超文本标记语言)上的属性OnDblClick的值,而我猜您是通过JQuery方法$('#id').dblClick(function() {})绑定了even。当以JQuery方式绑定时,不会在DOM中添加任何内容(所有内容都保存在内存中的JQuery代码中),这使得您实际上什么也不做。您应该尝试像这样解绑事件,而不是像以前那样解绑事件:

代码语言:javascript
复制
$("#"+id).off("dblclick");

这就是JQuery的方式。

票数 0
EN

Stack Overflow用户

发布于 2016-08-12 05:24:56

好了,这是我自己想出来的。但我承认,这只是一种猜测,我不完全理解它为什么会起作用,可能它是大错特错的。但它允许我随时更新表单元格中的数据,而不会陷入循环。它来了:

代码语言:javascript
复制
function makeForm(id){
    $("#"+id).prop('ondblclick', ""); // In the first round this disables the doubleclick event added through HTML (I think)
    $("#"+id).off("dblclick"); // In the second round this disables the doubleclick event added through jQuery (I think)
    sHtml=$("#"+id).html();
    $("#"+id).html("<input type=\"text\" id=\"t_"+id+"\" value=\""+sHtml+"\">");
    $("#"+id).change(function(){
        var content = $("#t_"+id).val();
        $("#"+id).html("<img src=\"icons/spinner.gif\" align=\"right\" width=\"20\" height=\"20\">");
        $.get("includes/query_update.php",{
            id:id,
            content:content
        },
        function(data){
            $("#"+id).html(data);
            $("#"+id).off("dblclick"); // This is beyond me. Why once more? Why here?
            $("#"+id).dblclick(
                function(){
                    makeForm(this.id);
                }
            );
        });
    });
}

如果有人能改进这一点,并向我解释到底发生了什么,我将不胜感激。

票数 0
EN

Stack Overflow用户

发布于 2018-12-31 16:21:46

$(选择器).unbind(‘dblclick’)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38895388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档