2015-08-22 67 views
0

我想爲每個過濾器創建一個顯示更多/更少的功能,默認情況下隱藏它們的相關選項,只顯示被點擊的選項。如何使用jQuery從foreach獲取div?

問題是,當我點擊任何「顯示更多」按鈕時,每個過濾器的選項都顯示出來,而不是當前被點擊的,反之亦然。

我通過foreach循環顯示過濾器和它們的選項,我不知道如何用jQuery獲得一個窗簾。

我想這是通過循環應該有一個唯一的標識符我所用ID =「{{$過濾器 - > ID}}」試圖創建的所有div

感謝您對您的所有幫幫我!

@foreach($filters as $filter) 

<h4>{{ $filter->title }}</h4> 
<a class="readmorebtn">Show options</a><br> 

    <div class="options" id ="{{ $filter->id }}"> 

    @foreach($filter->filteroptions as $option) 
     <div class="checkbox"> 
      <label> 
       <input type="checkbox" name="filteroptions[]" value="{{ $option->id }}" /> 
       {{ $option->title }} 
      </label> 
     </div> 
    @endforeach 
</div> 

@endforeach 

這是jQuery的部分:

var moreText = "Show options", 
    lessText = "Hide options", 
    moreButton = $(".readmorebtn"); 


$(".options").hide(); 

moreButton.click(function() { 

    $this = $(this); 

    if($('div.options:hidden')) { 
     showDiv(); 
    } 

    $this.text($this.text() == moreText ? lessText : moreText); 
}); 


function showDiv() { 

    $('div.options').slideToggle("fast"); 

} 
+0

可以創建的jsfiddle爲同一,http://jsfiddle.net。而不是php腳本在jsfiddle中使用它生成的html。 – dreamweiver

回答

0

的問題與您的代碼是您訪問所有的divs和切換他們時,被點擊more按鈕。

應該如何:

  • 傳遞當前對象並獲取當前div.options,然後執行該操作切換的效果。

JS代碼:

var moreText = "Show options", 
lessText = "Hide options", 
moreButton = $(".readmorebtn"); 

$(".options").hide(); 

moreButton.click(function() { 
    $this = $(this); 

    // if current div is hidden, then toggle it 
    if($this.find('div.options:hidden')) { 
    showDiv($this); 
    } 

    $this.text($this.text() == moreText ? lessText : moreText); 
}); 


function showDiv($currentDiv) { 
$currentDiv.find('div.options').slideToggle("fast"); 
} 
+0

這不爲我工作.. – Timea

+0

好,如果你可以創建一個jsfiddle,我可以在那裏檢查它。概念明智的正確,但只需要檢查一些語法錯誤。 – dreamweiver

相關問題