2017-10-19 4 views
0

Wir haben einen sehr alten jQuery-Code in meinem js Projekt, bereiten wir auf jquery 3, zu wandern, aber ich habe Probleme einen Wrapper für Live/auf das Schreiben:jquery: Live-Wrapper für auf

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

Klick Veranstaltung funktioniert gut, aber das Live-Event legt auf einen anderen Wähler, die ich nicht wählen, zB hier: https://jsfiddle.net/yvrbko35/

, wenn Sie in den ersten A klicken, wird der SPAN LIVE-Code ausgeführt wird

+0

Ihr Code funktioniert gut, das Live-Event wird wie in der Konsole angezeigt ausgelöst. – Zenoo

+0

'aber das Live-Event hängt an andere Selektoren, die ich nicht ausgewählt habe 'Welche anderen Selektoren? – gurvinder372

+0

Wenn Sie in das erste A klicken, wird der SPAN LIVE CODE ausgeführt – ZiTAL

Antwort

0

Wenn ich Ihre Frage richtig verstanden Wenn Sie auf # a1 klicken, wird auch beim Klick die Spanne ausgelöst. wh Ich will nicht.

Sie können überprüfen, ob das Ziel mit dem Selektor des Ereignisses übereinstimmt, das nicht auf Span ausgeführt werden soll und nur ausgeführt wird, wenn es nicht übereinstimmt.

https://jsfiddle.net/q5ydLjj9/

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

Ich würde gerne einen Wrapper für alle Fälle machen, nicht für bestimmte Selektor zu verhindern – ZiTAL

0

die JQuery Kern bearbeiten "Wähler" zu erhalten:

in dieser Funktion:

init = jQuery.fn.init

zuerst:

this.selector = selector;

innerhalb dieser, wenn:

if (typeof selector === "string")

an dieser Stelle:

 // 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; 
     } 

bearbeiten die Objekte Selektor-Attribut in das Rückgabeobjekt

der Live-Wrapper den Code wie folgt hinzufügen :

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

    return this; 
};