2017-10-19 94 views
0

我們在我的js的項目有一個很老的jQuery代碼現場包裝,我們正在準備遷移到jQuery的3,但我寫了直播/包裝問題:的jQuery:對

(function($) 
{ 
    $.fn.click = function(f) 
    { 
     this.on('click', f); 
     return this; 
    }; 
    $.fn.live = function(e, f) 
    { 
     $(document).on(e, this, f); 
     return this; 
    }; 
}(jQuery)); 

點擊事件工作正常,但在現場活動高度重視的另一個選擇,我沒有選擇,例如這裏:https://jsfiddle.net/yvrbko35/

當你在第一次點擊,如果我正確理解你的問題的SPAN LIVE代碼被執行

+0

您的代碼工作正常,實時事件觸發如控制檯中所示。 – Zenoo

+0

'但現場活動附加到其他選擇器,我沒有選擇'哪些其他選擇器? – gurvinder372

+0

當你點擊第一個時執行SPAN LIVE CODE – ZiTAL

回答

0

,點擊#a1也會觸發點擊時的跨度ich你不想要。

您可以檢查目標是否與您不想在span上執行的事件的選擇器匹配,並且只有在它不匹配時才執行。

https://jsfiddle.net/q5ydLjj9/

$('span').live('click', function(e) 
{ 
    if (!$(e.target).is('#a1')) 
    { 
    e.preventDefault(); 
    console.log('live click');  
    } 
    }); 
+1

我想爲所有情況做一個包裝,而不是用於防止特定選擇器 – ZiTAL

0

編輯Jquery的核心得到 「選擇」:

init = jQuery.fn.init

起初:

this.selector = selector;這個功能

的這裏面,如果:

if (typeof selector === "string")

在這個位置:

 // HANDLE: $(expr, $(...)) 
     } else if (!context || context.jquery) { 
      var r = (context || root).find(selector); 
      r.selector = selector; 
      return r; 

     // HANDLE: $(expr, context) 
     // (which is just equivalent to: $(context).find(expr) 
     } 
     else 
     { 
      var r = this.constructor(context).find(selector); 
      r.selector = selector; 
      return r; 
     } 

編輯的對象選擇屬性添加到返回的對象

現場包裝的這樣的代碼:

$.fn.live = function(e, f) 
{ 
    $(document).on(e, this.selector, f); 

    return this; 
};