2009-09-10 16 views
5

Ich habe eine jQuery Akkordeon in einer Seite in ASP: Net MVC-Anwendung, in der ich das aktive Akkordeon zur Laufzeit festlegen möchte.jQuery Accordion Einstellung aktiv

Mein Code ist wie folgt:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var accordionindex = $("#UIPViewModel_ActiveAccordion").val(); 
     alert("Setting active index to " + accordionindex); 
     $("#accordion").accordion('activate', accordionindex); 
    }); 
</script> 

Sie die letzte Zeile setzt das aktive Akkordeon sehen. Wenn ich diesen Code verwende, verhält es sich immer so, als hätte ich active: false und Alle Akkordeons sind geschlossen, obwohl die Warnung den korrekten Laufzeitwert anzeigt.

Ich habe auch versucht, einfach die folgenden verwenden, die gleich ist. (. 'Activate', $ ("# UIPViewModel_ActiveAccordion") val())

$ ("# Akkordeon") Akkordeon;

Als ich die letzte Zeile zu ändern:.

$ ("# Akkordeon") Akkordeon ('aktivieren', 2); (d. h. hart codiert). Es funktioniert immer richtig!

Kann jemand sehen, was los ist? Wo mache ich meinen Fehler ??

Antwort

9

Die von val() zurückgegebene Variable ist eine Zeichenfolge und Akkordeon erwartet eine Zahl. Versuchen:

var accordionindex = $("#UIPViewModel_ActiveAccordion").val(); 
    accordionindex = parseInt(accordionindex, 10); // convert a string to a number 
    alert("Setting active index to " + accordionindex); 
    $("#accordion").accordion('activate', accordionindex); 
+0

Das war das Problem. Auch wenn ich die selbe Seite wieder erhalte, und die Aktivierung aktiviert hat, hat das ausgewählte Akkordeon eine weniger als zufriedenstellende Folie hinterlassen. Ich habe einen Hinweis von einem anderen Beitrag hier über 'zerstören' bekommen und dann das Akkordeon mit dem aktiven Akkordeon neu erstellt, und die Seite wird ohne jeden Akkordeon UI Effekt wie benötigt aktualisiert. Ich benutzte: $ ("# Akkordeon"). Akkordeon ('zerstören'); $ ("# Akkordeon"). Akkordeon ({aktiv: parseInt (Akkordeonindex)}); – Redeemed1

+1

Ich habe versucht, eine Lösung für diese Stunden zu finden! Etwas so einfaches wie String vs. Integer. Beeindruckend. – Paul

+0

danke für die Buchung –

6

Gerade Kens Lösung zu erweitern:

<script type="text/javascript"> 
$(function() { 
    var accordionindex = Number($("#UIPViewModel_ActiveAccordion").val()); 
    alert("Setting active index to " + accordionindex); 
    $("#accordion").accordion('activate', accordionindex); 
}); 
</script> 

Sie wirklich brauchen nur die parseInt zu verwenden, wenn es eine Chance, dass die val() jemals etwas anderes als normale Ziffern sein (wie wenn es "Index 4" für den Wert hatte. Und Sie können es als Ziffer umwandeln, während Sie die Variable einstellen.

+0

tatsächlich kommt der Wert aus einem versteckten Feld mit einem int-Wert gefüllt. Es wird angezeigt, dass der Wert des ausgeblendeten Felds als Zeichenfolge zurückgegeben werden muss – Redeemed1

+2

Werte sind immer Zeichenfolgen, wenn sie aus dem DOM herauskommen. Selbst wenn Sie sie als Integer oder Floats darstellen und dann von js in das DOM injizieren. Das habe ich auf die harte Tour gelernt. – Anthony

2

für neuere Versionen, die Art und Weise (und deaktivieren), um die Platte zu aktivieren hat sich geändert:

jQuery(".selector").accordion("option", {active: index}); 

dauerte eine Weile, um herauszufinden, ich nicht verrückt war - jQueryUI 1.8 unterstützt die Activate-Methode. Sie haben es für 1.9 und höher losgeworden.