0

画像をクリックした後、JQueryを使用してツールチップボックスを表示しています。これまでのところ、正しいdivを選択してから、テキストノードを含む正しいサブdivを特定できます。残念ながら、サブディビジョンのテキストノードを取得できません。何が問題になっていますか?currentDescriptionContainerでhtml()を呼び出した後、「null」が発生しますか?前もって感謝します!

var tooltipItems = jQuery('.tooltipContainer').length;
var i=0;
for (i=0; i<tooltipItems; i++){
    jQuery('.tooltipContainer').eq(i).bind('click', function(){
    var currentContainer = jQuery('.tooltipContainer').eq(i);
    var currentDescriptionContainer = currentContainer.find('div');
    var currentDescriptionText = currentDescriptionContainer.html();
    console.log(currentDescriptionText);
    showRendererToolTipForIpad(this, currentDescriptionText);
    hideRenderedToolTipAfterTimeout();
    });
}
4

1 に答える 1

0

あなたのコードは本当に単純化することができます。このコードを試して、コンソールを開き、実行が正しいかどうかを確認してください

var tooltipItems = $('.tooltipContainer');
tooltipItems.bind('click', function() {
     var divs = $(this).find('div'), cdText;

     console.log('Element has %d descendent div/s' , divs.length);

     if (divs.length) {
         cdText = divs.text();
         console.log('Text found: ' , cdText);
         showRendererToolTipForIpad(this, cdText); /* this is the i-th DOM node */
         hideRenderedToolTipAfterTimeout();
     } 
});

html()要素のコレクションに適用すると、最初の要素にのみ影響することに注意してください。この例では、text()代わりに使用しました(取得する予定の要素の数はわかりません)。

コードについては、問題の原因となる可能性のある非自発的なクロージャを作成していると思われます。クリックイベントが発生すると、次のようになります。

var currentContainer = jQuery('.tooltipContainer').eq(i);

ただし、forサイクルはすでに終了しているため、変数iはコレクションの最後のインデックスになります。したがって、どのツールチップをクリックしても、currentContainer常にそのインデックスを使用した参照になります

于 2012-04-19T07:40:30.907 に答える