2013-10-15 54 views
0

jQuery的attr()不能正常工作第二次, editAsk事情正在 但editDone不工作。 editDone屬性自帶的.editAsk過程之後。jQuery的ATTR()不工作第二次

$('.editAsk').on('click', function(){ 
     var $this = $(this); 
     $this.attr('class', 'callEdit editDone'); 
    }); 
    $('.editDone').on('click', function(){ 
     var $this = $(this);  
     $this.attr('class', 'callEdit editAsk'); 
    }); 
+1

事件被結合到元件,而不是選擇器。更改元素,以便它的另一個選擇匹配不會更改綁定的元素是什麼事件。 –

回答

4

使用代表團是這樣的:

$(document).on('click', '.editAsk', function(){ 
    var $this = $(this); 
    $this.attr('class', 'callEdit editDone'); 
}); 
$(document).on('click', '.editDone', function(){ 
    var $this = $(this);  
    $this.attr('class', 'callEdit editAsk'); 
}); 

這樣做,這樣,就會讓你的事件處理程序委託給現有元素,或將添加任何未來的元素/ DOM中的修改。

你可以閱讀更多有關事件delegation using on here

+4

這將是你的答案有用的是包括_why_他應該使用這種方法,這樣他就可以學習向前發展。 –

+0

感謝現在的作品... – Frank11

+0

這本來是至少價值凸顯甚至抄襲了「爲了獲得最佳性能,附加在文件位置儘可能接近到目標元素委派事件,避免過度使用的文檔或文檔。爲大型文件上的委託活動提供機構。「部分文章鏈接。 '$(文件).on'結合應該是最後的手段。 – andyb

2
$('.callEdit').on('click.doSmth', function(){ 
    var $that = $(this); 
    if ($that.hasClass('editAsk')) { 
     // do smth 
    } else { 
     // do smth else 
    } 
    $that.toggleClass('editAsk editDone'); 
}); 

一個事件,沒有必要使用授權。另一種方式來做到這一點。