2013-09-26 31 views
0

我有一個問題generall有關定義客戶的事件並觸發然後:jQuery的觸發事件疊加隨着時間的推移

jQuery(document).on('btn.hover', function() { 
    jQuery('.orange_bubble').hover(function() { 
     jQuery(this).addClass('hover'); 
    }, function() { 
     jQuery(this).removeClass('hover'); 
    }); 
}); 

現在我可以調用觸發事件觸發此事件一次。

jQuery(document).trigger('btn.hover'); 

如果我產生了AJAX或通過JS我需要得到新的元素重新綁定事件內容:

,所以我再次觸發它:

$.ajax{ 
    bla 
    success: { 
     jQuery(document).trigger('btn.hover'); 
    } 
} 

我怎樣才能做到這一點沒有堆疊事件。我現在有這個問題。 我正在使用一些客戶事件,有時他們必須重新啓動所有元素,但只是一次而不是堆疊。

一次性發射事件的最佳實踐是什麼? 如果他們被設置爲dom中的某些元素?

THX的幫助

回答

1

.hover()是使用mouseentermouseleave事件的快捷方式,但一個缺點是它不能用於註冊委託處理程序,所以不是使用.hover()直接使用的事件。

所以儘量

jQuery(document).on({ 
    mouseenter: function() { 
     jQuery(this).addClass('hover'); 
    }, 
    mouseleave: function() { 
     jQuery(this).removeClass('hover'); 
    } 
}, '.orange_bubble') 
+0

工作PERFEKT。 他們是否有其他解決方案與觸發器? – Wykk

+0

你的答案很棒,我寫了一些觸發器,它的作品完美! – Wykk

1

首先你不必事件重新綁定到新添加的元素,如果你使用事件代表團。 從JQuery page

委託事件有優勢,他們可以處理來自被添加到該文件在稍後的時間後代元素的事件。通過挑選這是保證出席委派的事件處理程序連接時的元素,你可以使用委託的事件,以避免需要經常重視和移除事件處理程序

,你可以使用這樣的:

$("//container of .orange_bubble elements").on("hover", ".orange_bubble", function() { 
    //your content 
}); 

這也會阻止你「堆積」的事件

+0

代表團是答案..確定:)很酷 – Wykk

相關問題