プログラムでタブを選択するのに問題があります。リンクをクリックすると起動する Fancybox ダイアログ ウィンドウ内にタブが読み込まれます。基本的に、タブが選択されるたびに特定のアクションを実行し、リンクがクリックされたときに特定のタブを選択したいと考えています。
select
次のようなイベントで jQuery UI タブを初期化しています。
$('#tabs').tabs({
select: function(event, ui) {
// edit: here is the issue
var activePanel = '.ui-tabs-panel:visible ';
// grab value of a form input
var text = $(activePanel + 'someElement').val();
// check its length
if ( text.length > 0 ) {
// do stuff
}
}
})
後で私のJSファイルに次のものがあります:
$(document).on('click', 'a.edit', function() {
if($category == 'book') {
// load the tab specific to the 'book' category
$('#tabs').tabs({ selected: 3 });
}
})
a.edit
「書籍」カテゴリのアイテムのリンクをクリックすると、コンソールで次のエラーがスローされます。
Uncaught TypeError: Cannot read property 'length' of undefined
次に、タブが Fancybox に読み込まれる代わりに、何も起こりません。ブック カテゴリにないアイテムのリンクをクリックしても、このエラーはスローされません。したがって、次の 2 つのことが痛烈に明らかです。
- 私はn00bです
- 私の
select
イベントは明らかにクリックイベントによってオーバーライドされているため、text
設定されていません
text
JS ファイルの先頭にデフォルトを設定しようとしましたが、うまくいきません。私の質問は次のとおりです。
クリックイベントでタブをプログラムで選択しながら、選択イベントでUIタブを初期化する正しい方法は何ですか?
または、より簡潔に言うと、
なぜ私はそのいまいましいエラーが発生するのですか?
編集: 上記の最初のコード ブロックを修正して、問題に関連することを発見したコードを含めました。詳細な説明については、以下の私の回答を参照してください。