多次点击事件,但每次点击后解​​除绑定

发布于 2024-12-02 00:44:12 字数 804 浏览 0 评论 0原文

我想要做什么:每次单击表格行时,它都会进入编辑模式。当我单击另一行时,我之前单击的行退出编辑模式,而我刚刚单击的行进入编辑模式。

以下代码位于包含的 JavaScript 文件中。我有一个使表行可编辑的功能。

function editRow(row) {
    /* awesome code here */
}

并准备好事件...

$(".editable_title").click(function() {
    editRow(this.parentNode);
});`

我尝试过:

  1. 将代码放在 $(document).ready(function() { }); 之间,但它仅适用于第一次单击以及第一次编辑提交。但是,如果我尝试再次执行此操作,它就不起作用。

  2. 只需将代码本身放入包含的文件中,无需使用 $(document).ready(function(){ });。然后在 tr 上使用 onclick 事件。问题:

    1. JavaScript 是侵入性的。
    2. 如果我多次点击同一行,它会继续多次触发该事件;如果我单击不同的行,所有行都会同时进入编辑模式。

我知道这只是拥有一个恒定事件侦听器并使用取消绑定的问题。我尝试使用 .live() ,效果很好,但后来我无法让 .die() 工作。

你能给我一些建议吗?

What I want to do: Every time I click a table row it goes into edit mode. When I click another row, the row I clicked previously exits edit mode and the one I just clicked goes into edit mode.

The following code is in an included JavaScript file. I have a function that makes table rows editable.

function editRow(row) {
    /* awesome code here */
}

and have the events ready...

$(".editable_title").click(function() {
    editRow(this.parentNode);
});`

What I have tried:

  1. Put the code in between $(document).ready(function() { }); but it only works with the first click and the first edit submission. But then, if I try to do it again, it just doesn't work.

  2. Just put the code by itself in the included file without the $(document).ready(function(){ });. Then use onclick events on the tr's. Problem:

    1. The JavaScript is intrusive.
    2. If I click on the same row more than once, it keeps on triggering the event multiple times; and if I click in different rows, all of them go into edit mode at the same time.

I know it's just a matter of having an constant event listener and using unbind. I tried using .live() which worked well but then I couldn't get .die() to work.

Can you please give me some suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坏尐絯℡ 2024-12-09 00:44:12

您可以使用 one 而不是 click

$('.editable_title').one('click', function() { editRow(this.parentNode); });

:然后在完成编辑后,仅在您编辑的行的 .editable_title 上再次使用 one

或者你可以使用一个标志:

$('.editable_title').click(function() {
    var $p = $(this).parent();
    if($p.data('editing'))
        return;
    $p.data('editing', true);
    editRow($p[0]);
});

然后执行 $x.removeData('editing') ,当您完成编辑后,选择适当的 $x

You could use one instead of click:

$('.editable_title').one('click', function() { editRow(this.parentNode); });

And then use one again on just the .editable_title for the row you edited when you're done editing.

Or you could use a flag:

$('.editable_title').click(function() {
    var $p = $(this).parent();
    if($p.data('editing'))
        return;
    $p.data('editing', true);
    editRow($p[0]);
});

And then do a $x.removeData('editing'), for the appropriate $x, when you're done editing.

牵强ㄟ 2024-12-09 00:44:12

试试这个

$(".editable_title").one(function() {
    editRow(this);
});

function editRow(row) {
    var rowNode = row.parentNode;
    /* awesome code here */


    //Attach the click event here again after editing is done
    //If you are doing any ajax calls then this should be done in the success callback
    $(row).one(function() {
       editRow(this);
    });
}

Try this

$(".editable_title").one(function() {
    editRow(this);
});

function editRow(row) {
    var rowNode = row.parentNode;
    /* awesome code here */


    //Attach the click event here again after editing is done
    //If you are doing any ajax calls then this should be done in the success callback
    $(row).one(function() {
       editRow(this);
    });
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文