2016-04-26 5 views
1

Mit einer Glyphe-Bibliothek wie Font Awesome, Knöpfe oft am Ende aussehen, so etwas zu bekommen die Spanne oder die Taste selbst, je nachdem, wo der Benutzer klickt, so dass ich normalerweise mit etwas am Ende wie folgt:jQuery Event-Erweiterung Ereignisziel oder einen Elternteil spezifischen Typs

$('button').on('click', function($event) { 

    var $target = $($event.target); 
    var $button = $target.is('button') ? $target : $target.closest('button'); 

    // useful stuff goes here 
} 

Ist es möglich, das jQuery Event-Objekt hinzufügen, um ein Verfahren, das diese Funktionalität kapselt, so zu erweitern kann es so genannt werden?

var $button = $event.getSpecificTarget('button'); 

Ich habe eine JSFiddle erstellt, das Problem zu demonstrieren.

es getan werden könnte, ein normales jQuery-Plugin, aber es wäre sauberer fühlen, wenn es direkt aus dem Event-Objekt zugegriffen werden kann, anstatt über ein Plugin wie folgt aus:

var $button = $.getSpecificTarget($event, 'button'); 

Antwort

1

Sie das Ereignis binden kann zu dem Dokument, anstatt was Sie jetzt tun.

$(function() { 

    $(document).on('click', 'button', function() { 
    var button = $(this); 
    $('#result').append(button.text() + '<br>'); 
    }); 
}); 

Bitte überprüfen Sie diese JSFiddle.
Sie werden sehen, dass der Text der button an die div angefügt wird, wenn Sie auf die Schaltfläche selbst oder den Bereich klicken. Der Schlüssel verwendet $(this).
In der Tat können Sie den Code behalten, wie Sie es haben und $(this) verwenden, um die Schaltfläche zu erhalten.

+0

Interessant ... Mit Ihrer Methode ist das event.target immer noch die Spanne, wenn Sie darauf klicken, aber $ (this) gibt immer die Schaltfläche zurück, egal wo Sie klicken. Ich habe immer event.target anstelle von $ (this) verwendet, da ich dachte, dass es lesbarer wäre - ich habe nie bemerkt, dass es einen Unterschied gab. Sollte dies gelesen haben, denke ich: http://StackOverflow.com/a/21667010/13153 –