snap - jquery widget example




Sie müssen wissen, ob ein jQuery-UI-Widget auf ein DOM-Objekt angewendet wurde (4)

Ab jQuery UI 1.11 können Widgets direkt über die instance getestet werden:

var hasProgressbar = ($(element).progressbar("instance") !== undefined);

Dokumentation: http://api.jqueryui.com/jQuery.widget/#method-instance

Ich benutze jQuery und habe einige Interaktionen mit einer jQuery UI, wo ich Optionen bekommen muss. Es besteht jedoch die Möglichkeit, dass die jQuery UI-Funktion noch nicht auf das DOM-Objekt angewendet wurde. Ich erhalte jetzt einen JavaScript-Fehler, wenn ich auf eine Option zugreife.

Ich habe ein DOM-Objekt, das die Fortschrittsleiste ( http://docs.jquery.com/UI/Progressbar ) angehängt hat (vielleicht). In einem anderen Thread versuche ich mit domObj.progressbar("option", "value") auf die Optionen domObj.progressbar("option", "value") .

Wie domObj ich fest, ob an dieses domObj eine progressbar angehängt ist?


Das DOM-Objekt wird an eine zusätzliche CSS-Klasse angehängt: "ui-progressbar". Wenn Sie Quelle auf http://docs.jquery.com/UI/Progressbar , können Sie ein div mit id = progressbar sehen und nichts mehr, aber wenn Sie Firebug verwenden und auf das Element klicken, das Sie sehen können, hat es ein paar mehr klassifiziert hinzugefügt.

Bearbeitet: Ich denke, dass @ Jamiebarrows Lösung hier die korrektere ist.


Ich bevorzuge die Verwendung von hasOwnProperty für jedes Objekt in JavaScript, da jedes Mal ein Boolean zurückgegeben wird.

var hasWidget = $( "selector-here" ).data().hasOwnProperty( "widget-name-here" );
if ( hasWidget )
{
    // Put your awesome code here.
}

Was IMHO ist ein wenig besser als Null überprüfen; Was ist, wenn es zu undefiniert wechselt, was IMO ist, was es zurückgeben soll.


Sie können auf das Fortschrittsbalkenobjekt auf dem Element zugreifen, indem Sie Folgendes tun:

$("#myid").data("progressbar")

Also um das zu benutzen:

var progressBar = $("#myid").data("progressbar");
if ( progressBar == null ) {
    // handle case when no progressbar is setup for my selector
} else {
    alert("The value is: " + progressBar.value());
}




progress-bar