質問
ASP:Net MVCアプリケーションのページに、実行時にアクティブなアコーディオンを設定するjQueryアコーディオンがあります。
私のコードは次のとおりです。
<script type="text/javascript">
$(document).ready(function() {
var accordionindex = $("#UIPViewModel_ActiveAccordion").val();
alert("Setting active index to " + accordionindex);
$("#accordion").accordion('activate', accordionindex );
});
</script>
アクティブなアコーディオンを設定する最後の行が表示されます。 このコードを使用する場合、常にアクティブを使用したように動作します:falseおよびすべてのアコーディオンが閉じています。ただし、アラートに正しいランタイム値が表示されます。
また、同じものを単純に使用してみました:
$(&quot;#accordion&quot;)。accordion( 'activate'、$(&quot;#UIPViewModel_ActiveAccordion&quot;)。val());
最後の行を次のように変更したとき:
$(&quot;#accordion&quot;)。accordion( 'activate'、2); (つまり、ハードコーディングされています)。常に正しく動作します!
誰が間違っているかを見ることができますか? どこで間違いを犯していますか?
解決
val()
によって返される変数は文字列であり、アコーディオンは数値を予期しています。試してください:
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 );
他のヒント
ケンのソリューションを拡張するだけ:
<script type="text/javascript">
$(function () {
var accordionindex = Number($("#UIPViewModel_ActiveAccordion").val());
alert("Setting active index to " + accordionindex);
$("#accordion").accordion('activate', accordionindex );
});
</script>
val()が通常の数字以外になる可能性がある場合(値に「インデックス4」があった場合など)にのみ、parseIntを使用する必要があります。そして、変数を設定するときに数字としてキャストできます。
新しいバージョンでは、パネルをアクティブ化(および非アクティブ化)する方法が変更されました:
jQuery(".selector").accordion("option", {active: index});
私に夢中ではないことを理解するためにしばらく見てください-jQueryUI 1.8はactivateメソッドをサポートします。 1.9以上では削除されました。