2010-05-24 9 views
6

ich einen jquery-ui-Widget des Widget Factory mit geschrieben habe ...Bestimmen Sie, ob ein Element ein jQueryUI Widget ist

Ich brauche in Code bestimmen zu können, ob das Element bereits ein Widget ist oder nicht .. mit

auf #container erstellt
$('#container').investmentGrid() 

muss ich in der Lage zu bestimmen, an anderer Stelle im Code.

Mein investmentGrid Widget, wenn $ ('# Container') ist bereits ein investmentGrid

Antwort

6

Sie die jQuery.data() Funktion des Elements abfragen kann, etwa so:

if ($('#container').data('investmentGrid')) { 
    ... 
} 
1

@Boycs: Nach meinem Verständnis schützt die Verwendung von Widget Factory Sie davor, ein Plugin mehrmals auf demselben Element zu instanziieren. (Ref: http://jqueryui.pbworks.com/widget-factory)

Außerdem, wenn Sie wollen, um zu bestätigen, wenn "Container" ist bereits eine Investition Raster Sie die folgende Option aus Ihrem Plugin-Code versuchen:

this.element.data (“ investmentGrid ") === dies;

Für weitere Informationen können Sie auf docs.jquery.com/UI_Developer_Guide siehe

+0

Danke ... Ich war vielleicht nicht klar in meiner ersten Frage ...Ich muss in der Lage sein, von außerhalb meines Plugin-Codes zu bestimmen, ob $ ('# container') bereits ein investmentGrid ist oder nicht ... – Boycs

+0

Können Sie mir mitteilen, warum Sie feststellen müssen, ob "container" bereits vorhanden ist ein investmentGrid oder nicht? Es wird mir helfen, genauer zu antworten. Vielen Dank –

5

Sie könnten den Pseudo-Selektor versuchen, das ist erstellt für Sie bei Verwendung der Widget-Factory. $(":namespace-widgetname")

3

@ dan-story könnte die Antwort zu dem Zeitpunkt gehabt haben, als er antwortete, aber ich habe festgestellt, dass diese Methode nicht mehr funktioniert. Nun, nicht ganz. Zumindest nicht mit jQueryUI 1.10. Laut der Dokumentation unter http://api.jqueryui.com/jQuery.widget/ im Abschnitt "Instance" müssen Sie nun den vollen Namen des Widgets haben.

Zum Beispiel, wenn Sie Ihre Widget-Fabrik mit diesem erstellen:

$.widget("Boycs.investmentGrid", ...); 

Dann zu überprüfen, ob Behälter, den er hat, würden Sie dies überprüfen:

if ($('#container').data('Boycs-investmentGrid')) 
{ 
    ... 
} 

Es ist nicht mehr genug um nur den Namen zu verwenden.

1

Aktuelle Versionen von jQuery UI (ich kann es mit 1.11.x bestätigen) können Sie für eine Instanz eines Widgets über die instance() Methode abfragen. Dies wird dann wie folgt aussehen:

$('#container').investmentGrid('instance') 

Wenn das Element kein investmentGrid Widget zugewiesen ist, Sie undefined zurück zu bekommen.

Sie können auch diese verwenden stattdessen nennen:

$(#container').is(':data("namespace-investmentGrid")') 

Dies hat den Vorteil, dass es funktioniert sogar auch, wenn das Widget nicht geladen ist.

Verwandte Themen