Jquery 多次单击事件,但每次单击后取消绑定

Jquery 多次单击事件,但每次单击后取消绑定,jquery,rows,Jquery,Rows,我想做的是:每次单击表行时,它都会进入编辑模式。单击另一行时,我先前单击的行将退出编辑模式,而我刚才单击的行将进入编辑模式 以下代码位于包含的JavaScript文件中。我有一个使表格行可编辑的函数 function editRow(row) { /* awesome code here */ } 把活动准备好 $(".editable_title").click(function() { editRow(this.parentNode); });` 我所尝试的: 将代码放在

我想做的是:每次单击表行时,它都会进入编辑模式。单击另一行时,我先前单击的行将退出编辑模式,而我刚才单击的行将进入编辑模式

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

function editRow(row) {
    /* awesome code here */
}
把活动准备好

$(".editable_title").click(function() {
    editRow(this.parentNode);
});`
我所尝试的:

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

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

  • JavaScript是侵入性的
  • 如果我多次单击同一行,它会多次触发事件;如果我在不同的行中单击,所有行都会同时进入编辑模式
  • 我知道这只是拥有一个固定的事件侦听器并使用unbind的问题。我试着使用
    .live()
    ,效果很好,但后来我无法让
    .die()
    工作

    您能给我一些建议吗?

    您可以使用而不是
    单击

    $('.editable_title').one('click', function() { editRow(this.parentNode); });
    
    然后在编辑完成后,对编辑的行仅在
    .editable\u title
    上再次使用
    one

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

    $('.editable_title').click(function() {
        var $p = $(this).parent();
        if($p.data('editing'))
            return;
        $p.data('editing', true);
        editRow($p[0]);
    });
    
    然后在编辑完成后,对相应的
    $x
    执行一次操作。

    试试这个

    $(".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);
        });
    }
    

    看看这个。这就是你要找的。谢谢@ShankarSangoli,但是我尝试了
    。一个
    ,但是在我提交更新按钮之后呢?我无法使更多行进入“编辑更多”。您可以再次调用
    one
    并附加处理程序。我如何才能做到这一点?你的意思是我再次点击该行来再次调用它?它只工作一次。你有没有想过添加一个退出编辑模式的函数,这是在
    $(“.editable\u title”)上调用的第一件事。单击()
    。谢谢@mu,但是我怎么能多次使用
    .one
    呢?@leonel:你必须再次调用它(但只是为了你感兴趣的单个
    .editable\u title
    )当你完成编辑后,我怎么能再叫它?我不明白。我可能可以在链接上执行一个
    onclick()
    事件,但这将是一个非常突出的javascript。或者你认为这是正确的方法吗?@leonel:你只要调用
    $(x).one('click',function(){editRow(this.parentNode);})x
    上,可能是
    $(e)。最近('tr')。查找('.editable_title')。一(…
    其中
    e
    是传递给
    editRow
    的内容。我将使用标志解决方案。