2012-06-17 40 views
8

Nội dung của trang của tôi được chuyển đổi bằng các liên kết khác nhau, hiển thị một div cùng một lúc bằng cách sử dụng chức năng 'showonlyone' của jQuery. Khi tải trang, không có div nào được hiển thị. Tôi đã làm cho nó hoạt động tốt, cho đến khi tôi cố gắng đặt một thanh trượt hình ảnh (bxSlider) trong một trong các div, newboxes1.bxSlider trong hiển thị/ẩn số div

Bên ngoài hộp, bxSlider hoạt động tốt. Trong đó, những hình ảnh không hiển thị. Xem ví dụ trực tiếp here.

Đây là những gì mã của tôi trông giống như:

<head> 

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript">           
function showonlyone(thechosenone) { 
    $('.newboxes').each(function(index) { 
      if ($(this).attr("id") == thechosenone) { 
       $(this).show(); 
      } 
      else { 
       $(this).hide(); 
      } 
    }); 
}</script> 
</script> 


<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script> 
<script src="jquery.bxSlider.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 

$(function(){ 
    var slider = $('#slidersample').bxSlider({ 
    mode:'fade', 
    controls: false 
    }); 
    $('#bx-prev-sample').click(function(){ 
    slider.goToPreviousSlide(); 
    return false; 
    }); 
    $('#hover-next-g-sample').click(function(){ 
    slider.goToPreviousSlide(); 
    return false; 
    }); 
    $('#bx-next-sample').click(function(){ 
    slider.goToNextSlide(); 
    return false; 
    }); 
    $('#hover-next-d-sample').click(function(){ 
    slider.goToNextSlide(); 
    return false; 
    }); 
}); 
}); 
</script> 
</head> 


<body> 
<div id="left-menu"> 
<a id="myHeader1" href="javascript:showonlyone('newboxes1');" >LINK 1</a><br /> 
<a id="myHeader2" href="javascript:showonlyone('newboxes2');" >LINK 2</a><br /> 
<a id="myHeader3" href="javascript:showonlyone('newboxes3');" >LINK 3</a> 
</div> 

<div class="newboxes" id="newboxes1">DIV 1 
<!-- SLIDER --> 
<div id="slider" style="margin-top: 0px; width="580 px"; height="375 px"> 
<div class="bx-prev"><div id="bx-prev-sample">←</div></div> 
<div class="bx-next"><div id="bx-next-sample">→</div></div> 
<div class= "hover-next-g"><div id="hover-next-g-sample" style="height:100%; width:100%"></div></div> 
<div class= "hover-next-d"><div id="hover-next-d-sample" style="height:100%; width:100%"></div></div> 
<ul id="slidersample" width="580px" height="375 px" style="margin:0px ; padding:0px"> 
    <li><img src="images/1.jpg" width="580" height="375" /></li> 
    <li><img src="images/2.jpg" width="580" height="375" /></li> 
    <li><img src="images/3.jpg" width="580" height="375" /></li> 
</ul> 
</div> 
<!-- SLIDER END--> 
</div> 

<div class="newboxes" id="newboxes2">DIV 2<br /></div> 

<div class="newboxes" id="newboxes3">DIV 3</div> 

</body> 
</html> 

tôi sử dụng

.newboxes {display:none;} 

trong CSS để không ai trong số các divs được hiển thị khi trang đang tải. Loại bỏ điều này khỏi CSS giải quyết vấn đề bxSlider, như bạn có thể thấy here. Tuy nhiên, nội dung được hiển thị khi trang được tải, trong khi tôi muốn tất cả nội dung đó bị ẩn. Mọi nỗ lực sử dụng display:block hoặc display:none ở nơi khác trong mã đã không thành công.

Có ai có thể nghĩ ra cách sửa lỗi này không? Cảm ơn bạn.

Trả lời

6

Tôi biết câu hỏi này được hỏi một lúc trước nhưng tôi có cùng một vấn đề. Tôi không có ý tưởng whats up với bxSlider và hiển thị: none. Nó không có vẻ để đọc nội dung nếu nó chứa trong một div với màn hình hiển thị thiết lập để không.

Tôi đã nhận được xung quanh nó cho đến nay bằng cách chuyển đổi visibility:hiddenvisibility:visible thay vì hiển thị.

+0

Đây là giải pháp tuyệt vời. Cảm ơn ý tưởng !! –

18

Tôi đã gặp sự cố tương tự với plugin bxSlider: khi DIV chứa nó ban đầu bị ẩn display:none, trình chiếu sẽ không xuất hiện khi tôi hiển thị DIV $('#div-id').show();. Chỉ xuất hiện các nút điều khiển trình chiếu. Sau đó, tôi giải quyết vấn đề như thế này:

<script> 

var mySlider; 

$(function() { 

    mySlider = $('#slider').bxSlider({ 
      easing: 'easeInCubic', 
      displaySlideQty: 3, 
      moveSlideQty: 1, 
      infiniteLoop: false, 
      hideControlOnEnd: true 
    }); 

    $("#processSignUp").click(function() { // button that sets the DIV visible 
     $("#trainings-slide").show();  // DIV that contain SLIDER 
     mySlider.reloadSlider();  // Reloads the slideshow (bxSlider API function) 
    }); 

}); 

</script> 

Như bạn có thể thấy tôi nạp lại trình chiếu ngay sau DIV (có chứa các thanh trượt) được thể hiện và nó làm việc một cách hoàn hảo. Có thể điều đó có thể giúp giải quyết các vấn đề của bạn và tránh sử dụng khả năng hiển thị: các thủ thuật ẩn và các thủ thuật khác.

+6

Câu trả lời hay - lưu ý rằng phiên bản trượt mới nhất của BX là chức năng reloadSlider() không reloadShow() – rentageekmom

+0

Nếu nếu tôi không có con trỏ vào mySlider nữa? hoặc nếu tôi muốn tải lại tất cả các trang trình bày với một số lớp css? $ ('. bxslider'). reloadSlider() không hoạt động –

+1

không hoạt động đối với tôi: Loại không bắt buộcLỗi: slider.reloadSlider không phải là hàm –

2

Bạn có thể sử dụng chế độ hiển thị: ẩn và hiển thị: hiển thị, nhưng sẽ có một số rắc rối. Và bạn có thể sử dụng chiều cao: 0px; overflow: hidden; Tôi sẽ sử dụng giải pháp cuối cùng

2

Một giải pháp khác là cho phép bxslider tải, sau đó ẩn nó một lần.

<script> 
    var mySlider; 

    $(function() { 
     mySlider = $('#slider').bxSlider({ 
      easing: 'easeInCubic', 
      displaySlideQty: 3, 
      moveSlideQty: 1, 
      infiniteLoop: false, 
      hideControlOnEnd: true, 
      onSliderLoad: function() { 
       $('#trainings-slide').hide(); 
      } 
     }); 
    }); 
</script> 
+1

điều này không hoạt động đối với tôi, dẫn đến chính xác điều tương tự xảy ra. –

+0

Điều này phù hợp nhất với tôi – tosin

Các vấn đề liên quan