2016-05-27 11 views
0

Also ich versuche, durch eine Klasse von Akkordeon jquery Objekte iterieren, prüfen Sie, welche diejenigen offen, zu einem Array diejenigen hinzufügen, dann (nach einem Reset der Akkordeons) die Akkordeons wieder öffnen die waren vorher offen. Das scheint eine wirklich einfache Frage zu sein, und ich entschuldige mich, aber bei meinen Recherchen scheint es so zu sein, als ob die Fragen nur darin bestanden, mit jQuery zu iterieren und nicht über Arrays von jquery-Objekten zu iterieren. Ich konnte wirklich keine Antwort finden.dynamisch eine Reihe von jquery Akkordeons Öffnung

Dies ist, was ich zur Zeit haben, die aus irgendeinem Grund nicht funktioniert. Zuerst wird das Array der bereits geöffneten Akkordeons erstellt.

 $(".accordionClass").each(
      function(){ 
       if($(this).accordion("option", "active") !== false) { 
        activeArray.push($(this)); 
       } 
      } 
     ); 

Dies scheint zu funktionieren. Zumindest gibt activeArray.length die korrekte Anzahl von Objekten an.

Dann versuche ich später alle der Akkordeons in diesem Array zu öffnen, nachdem sie neu initialisiert worden ist.

$.each(activeArray, 
     function(){ 
      $(this).accordion({ active: 0 }); 
     } 
    ); 

Und keine Würfel. Sie öffnen sich nicht. Irgendwelche Ideen?

+1

als aktives Array bereits enthält jquery Objekt .. Sie können this.accordian ({active: 0}). aber bessere Lösungen würden, wie vorgeschlagen, das DOM-Objekt in ein Array statt in ein jQuery-Objekt speichern. Ich hoffe, Sie erstellen DOM-Objekte nicht neu? – Ankit

Antwort

0

Lösung

In der Frage auf Frage wie geschrieben, Sie jQuery Objekte drängen ($(this)) in das Array, sie aus, zu lesen und dann die Objekte in einem anderen jQuery-Selektor wickeln.

Sie sollten stattdessen drücken Sie einfach die native DOM-Objekt, this.


Lösung für das Problem

Das spezifische Problem hier (in den Kommentaren zu dieser Antwort gefunden, und nicht die Frage selbst) ist, dass das Objekt zerstört wird, und dann ein ähnliches Objekt wird erstellt (aus dem gleichen Markup). Dies ist in der Regel eine schlechte Übung, führt aber auch zu dem Problem in der Frage: Das Objekt, auf das durch die this verwiesen wird, existiert nicht mehr zum Zeitpunkt des Auslesens.

Stattdessen sollten Sie this.id drücken und dann jQuery verwenden, um die Kopie mit $('#'+this) erneut auszuwählen.

+0

Immer noch nichts. Ich habe auch ein paar andere Möglichkeiten zum Öffnen, wie '$ (this) .accordion (" Option "," aktiv ", 0);' ohne Ergebnis versucht, so dass ich wirklich nicht sicher bin, was das Problem ist ist. –

+0

Sorry ich kann nicht mehr helfen; Ich bin Afk. Versuchen Sie, den Inhalt des Objekts mit JSON.stringify zu untersuchen. Und versuchen Sie, alle Akkordeons zu öffnen (oder nur eine bestimmte), um den richtigen Weg zu finden, sie zu öffnen. – Kittsil

+0

Hmm yeeeah. Also 'JSON.stringify (activeArray);' gibt '[{}, {}, {}]', wenn es in einem Array erfolgt, das nur mit 'this 'gefüllt wurde. Wenn stattdessen "$ (this)" aufgefüllt wird, gibt stringify '[{"0": {}, "context": {}, "length": 1}, {"0": {}, "context": { }, "Länge": 1}, {"0": {}, "Kontext": {}, "Länge": 1}] '. Ich muss gestehen, ich weiß nicht genug über JSON oder JQuery, um zu wissen, ob diese wie erwartet oder komplett kaputt sind. In der Zwischenzeit war es ziemlich einfach, alle Akkordeons zu öffnen, indem man '$ (". AccordionClass ") verwendete.jede ( \t \t \t function() { \t \t \t \t $ (this) .accordion ({aktiv: 0}); \t \t \t} \t \t); 'So scheint es, das Problem in dem Array liegt. –

Verwandte Themen