2012-02-28 11 views
1

私はこのコードで停止しています。私は並べ替えられていないリストを含むいくつかのdivを持つ1つのページを持って、jqueryを使用して表示/非表示、私はタブ付きのコンテンツになっている。リスト項目を削除するフィルタもあります。フィルタがすべての項目をタブから削除した場合、フィルタがこのタブからすべてのコンテンツを削除したことをユーザに警告するメッセージが表示されます。フィルタを削除すると、アクティブな(表示されている)タブの警告メッセージのみが削除されます。フィルタは非アクティブ(非表示)タブ内のリスト項目を効果的に表示/削除しますが、警告メッセージが表示されなくなります。見て、そしてあなたの時間をありがとうございまし下さい:jqueryは私のeach()の隠しdivを無視していますか?

$('div.eventContent').each(function (index, element) { 
     { 
      var these_li = $ (element).find('li.eventContentItem:visible'); 
      if (these_li.length > 0) 
      { 
       $ (element).find('.noVisibleEvents').hide(); 
      } 
      else 
      { 
       $(element).find('.noVisibleEvents').show(); 
      } 
      these_li = 0; 
     } 
    }) 
+0

あなたのHTMLも投稿できますか?また、各ブロックの後にセミコロンがないように見えます。 – SenorAmor

+0

@SenorAmorコードがインラインでない限り、jsでセミコロンは必要ありません。 – Birdman

+0

@Birdman - 私はあなたの_Generalisation_にセミコロンについて同意します(必要な場合があります)が、関数名とその '$'()の間のスペースについては '$(example)'は有効です。 – nnnnnn

答えて

0

私はあなたの問題は相続やに関連することが必要になる場合があります推測:目に見える jqueryのセレクタ。ドキュメントが言うように、jqueryは隠された親に含まれるすべての要素に隠されていると考えます。したがって、隠されたタブに要素が表示されるかどうかを確認するには、の表示プロパティを確認する必要があります。 しかし、コードはもう少し複雑になります

$('div.eventContent').each(function() { 
    { 
     var isEmpty = true; 

     $(this).find('li.eventContentItem').each(function() { 
      if ($(this).css('display') != 'none') { 
       isEmpty = false; 
       return false; // exits the loop 
      } 
     }); 

     if (isEmpty)    

      $ (this).find('.noVisibleEvents').hide(); 

     else 

      $(this).find('.noVisibleEvents').show(); 


}) 
+0

ありがとう!私が変更しなければならなかった唯一の事は、最終的なif/else - hide()とshow()が間違った場所にあったことです。 –

関連する問題