Ich habe ein (intermittierendes) Problem mit der Buttonset-Funktion von jQuery UI. Manchmal, wenn ich es anrufe, wendet es nur die Klassen an, die es dem Container div und dem ersten Kind hinzufügt, und manchmal funktioniert es genau wie erwartet. (Tut mir leid, ich kann nicht eine Geige dafür machen, ich kann es nicht außerhalb meiner Anwendung passieren.) Das gleiche Problem mit beiden jQuery UI 1.10.0 und 1.10.4.
d. Ich beginne damit:
%Vor%und erhalten Sie dies nach dem Aufruf von Buttonset (beachten Sie, dass der Radio-Button bekommt eine einzige, falsche Klasse hinzugefügt):
%Vor%statt dessen:
%Vor%Update: Ich kann das in meiner Anwendung konsistent reproduzieren. Die Anwendung verwendet AngularJS, und ich habe 2 Ansichten, die den Button verwenden, nennen sie "A" und "B". Es passiert immer, wenn ich auf "A" gehe, die Seite aktualisiere und dann zu "B" navigiere. Es geschieht nie in der umgekehrten Reihenfolge, oder wenn ich von einer anderen Ansicht in der Anwendung aus starte. Früher würde es nicht passieren, wenn ich es neu erstellte und dann zurück zu "A" navigierte, aber jetzt, wo ich es in eine Direktive umstrukturierte, wenn ich bei "A" auffrische, sehe ich die richtige Schaltfläche, gehe zu "B", I Sehen Sie sich die durcheinander geratene Version an, navigieren Sie dann zu "A" und ich sehe dort auch den vermasselten, und es bewirkt auch eine zweite Schaltfläche, die auf "A" gesetzt ist und nicht Teil der Direktive ist.
Ich habe versucht, ein grundlegendes Beispiel in JS Fiddle mit zwei Ansichten unter Verwendung von Buttonset neu zu erstellen, aber es war nicht genug, um den Bug neu zu erstellen.
Ich habe mir für ungefähr einen Tag mit genau diesem Problem den Kopf gebrochen, ohne eine Lösung zu finden.
Das Problem war in meinem Fall die Verwendung von Bootstrap.
Bootstrap verwaltet auch Schaltflächen und verwendet den gleichen Namen buttons
wie von Jquery UI verwendet.
Die Lösung (wirklich wirklich so einfach wie nicht gefunden !!!) war, einfach die Reihenfolge der Aufnahme auf der Seite zu ändern: Bootstrap.js
zuerst und dann jquery-ui...js
.
Diese einfache Sache löste das Problem (auch wenn es der Konflikt bleibt).
Für eine solidere Lösung ist es vielleicht nützlich, JQuery UI Bridge oder put bootstrap in keinem Konflikt-Modus (aber ich habe diese Lösungen im Moment nicht getestet, auch wenn ich 99% sicher bin, dass sie lösen werden das Problem).
HINWEIS: Derselbe Konflikt besteht auch für Tooltips.
Die beste Option für Sie besteht darin, eine Anweisung aus Ihrer jQuery UI-Buttonset-Komponente zu erstellen. Es ist sehr wahrscheinlich, dass Ihre Komponente gut geladen wird, wenn das Benutzeroberflächenelement viisble ist, und wenn es nicht funktioniert.
Eine weitere Option ist, die jQuery-Init-Funktion aufzurufen, sobald eine neue Ansicht geladen wird. Auf diese Weise stellen Sie sicher, dass der Buttonset sichtbar ist, wenn Sie versuchen, ihn zu initialisieren.
Versuchen Sie eine Direktive zu erstellen, um einen Link zu Ihrer Seite zu erstellen (Beispiel auf jsbin )
Anweisung:
%Vor%und verwenden Sie die Direktive im Schaltflächencontainer:
%Vor%Tags und Links javascript html angularjs jquery jquery-ui