2013-03-18 53 views
0

這是在寫我的javascript一個經常性的問題:我的活動:合併兩個類似的單擊事件到一個

$(document).on('click','.mi_piace_brick',function(){ 
    $this = $(this).children(), 
    $that = $(this), 
    i = s.get_current_step_id(), 
    j = $that.attr('data-class'), 
    counter = parseInt($('.like_counter_'+i+'_'+j).first().find('p').text()); 

    if($this.hasClass('liked')){ 
     $this.removeClass('liked'); 
    $('.like_counter_'+i+'_'+j).find('p').text(--counter); 
    } 
    else{ 
    $this.addClass('liked'); 
    $('.like_counter_'+i+'_'+j).find('p').text(++counter); 
    } 
    }) 

而且

$(document).on('click','.pref_brick',function(){ 
    $this = $(this).children(), 
    $that = $(this), 
    i = s.get_current_step_id(), 
    j = $that.attr('data-class'), 
    counter = parseInt($('.fav_counter_'+i+'_'+j).first().find('p').text()); 

     if($this.hasClass('preferito')){ 
     $this.removeClass('preferito'); 

     $('.fav_counter_'+i+'_'+j).find('p').text(--counter); 
    } 
    else{ 
     $this.addClass('preferito'); 
      $('.fav_counter_'+i+'_'+j).find('p').text(++counter); 
     } 
     }) 

正如你可以看到,這兩個功能基本上真的很相似。在這種情況下我經常遇到。在您看來,有一種方法只使用一種綁定來實現這個訣竅?

+0

你能把代碼的主體重構成一個單獨的函數,該函數需要兩個函數不同的位參數嗎? – 2013-03-18 17:49:45

回答

0

將這些元素分配給他們將共享並將單擊事件附加到該共享類的類。如果需要區分這兩者,請使用元素的數據屬性。

<input class="sharedClass" data-parameter="enabled" /> 

$(document).on('click', '.sharedClass', function(eventObject) { 
    eventObject.preventDefault(); 
    if ($(eventObject.target).data('parameter') == 'enabled') { 
     // your logic for "enabled" element 
    } 
});