2013-11-01 55 views
0

但是,在此之前我已經提出了這個問題,因爲它適用於使用jQuery Mobile時嘗試加載到DOM中的任何JavaScript。爲了讓swiper能夠正確加載jQuery Mobile以及我應該使用哪個頁面事件,我該按照哪種順序準確放置javascript文件?

我有三個頁面使用jQuery Mobile 1.4.0 RC1構建。 index.html只是一個頁面模板,我將swiper添加到第2頁,swiper和easytabs添加到第3頁。您可以在這裏看到它們:http://builtformobile.com/demos/jquerymobile/swiper1/index.html

我試過將jQuery和jQuery Mobile JavaScript文件放在幾個不同的方式,在頭部,底部,至於idangero.us的額外javacript Swiper和Jango Steve在數據角色頁面外部和內部的Easytabs.js。

根據我在哪裏放置javascript for easytabs和swiper,在DOM內部或外部,使用pagecreate或pageinit,當加載或刷新頁面時,我仍然會得到奇怪的結果。我要麼必須刷新頁面才能使javascript工作,要麼我看到其他頁面的內容加載到不應加載它的頁面上。

我的問題是: 我在哪裏放置javascript? 加載jQuery Mobile之前還是之後? 我在哪裏放置javascript文件,哪些頁面事件對我的頁面是正確的? 在進入另一個頁面之前,我是否使用頁面事件來顯示內容和另一個頁面事件以停止該內容?

非常感謝您的時間。

<div data-role="header"> 
     <h1>three</h1> 
    </div><!-- /header --> 

    <div data-role="navbar" class="navbar"> 
     <ul> 
      <li><a href="index.html">Index</a></li> 
      <li><a href="page-two.html">Page 2</a></li> 
      <li><a href="page-three.html">Page 3</a></li> 
     </ul> 
    </div> 

    <div data-role="content">  

     <a class="arrow-left" href="#"></a> 
     <a class="arrow-right" href="#"></a> 
     <div class="swiper-container"> 
      <div class="swiper-wrapper"> 
      <div class="swiper-slide"> <img src="img/slider1-1.png"> </div> 
      <div class="swiper-slide"> <img src="img/slider1-2.png"> </div> 
      <div class="swiper-slide"> 
       <div class="content-slide"> 
       <p class="title">Slide with HTML</p> 
       <p>You can put any HTML inside of slide with any layout, not only images, even another Swiper!</p> 
       </div> 
      </div> 
      </div> 
     </div> 
     <div class="pagination"></div> 


     <div id="tab-container" class="tab-container"> 
      <ul class="etabs"> 
       <li class="tab"><a href="#tab1">Tab 1</a></li> 
       <li class="tab"><a href="#tab2">Tab 2</a></li> 
       <li class="tab"><a href="#tab3">Tab 3</a></li> 
      </ul> 
      <div class="panel-container"> 
       <div id="tab1"> 
        content 3 
       </div> 
       <div id="tab2"> 
        content 2 
       </div> 
       <div id="tab3"> 
        content 1 
       </div> 
      </div> 
     </div> 

    </div><!-- /content --> 

<div data-role="footer"> 
    <h4>Page Footer</h4> 
</div><!-- /footer --> 


<script src="js/idangerous.swiper-2.1.min.js"></script> 
<script> 
$(function(){ 
    var mySwiper = $('.swiper-container').swiper({ 
     pagination: '.pagination', 
     loop:true, 
     grabCursor: true, 
     paginationClickable: true 
    }) 
}) 

$('.arrow-left').on('click', function(e){ 
    e.preventDefault() 
    mySwiper.swipePrev() 
}) 

$('.arrow-right').on('click', function(e){ 
    e.preventDefault() 
    mySwiper.swipeNext() 
}) 

</script> 

<script src="js/jquery.easytabs.min.js"></script> 
<script> 
    $(function() { 
     $('#tab-container').easytabs(); 
    }); 
</script> 

</div> 

回答

0

每個PA GE應該有所有的JavaScript,這是因爲:

  • 用戶可在indexpage1page2
  • 開始的第一個頁面加載的將是你的 「錨頁面」(〜JQM稱之爲documentBase)。
  • 用戶將永遠離開這個頁面,除非(單程)添加data-ajax="false"一個鏈接
  • 後續頁面的用戶訪問將通過JQM通過AJAX來獲取並添加到現有的DOM
  • 這樣做時,JQM只是插入裏面是什麼頁面的第一<div data-role="page"></div>加載

如果禁用JQM哈希管理你會看到,會從:

/foo/bar/index.html > /foo/bar/page1.html 

將URL切換到

/foo/bar/index.html#foo/bar/page1.html 

這JQM口罩

/foo/bar/page1.html 

因此,除非用戶啓動這個頁面上,你放在pageX所有<script>標籤將不會被加載。

我建議您將js方法放在一個文件中,並將其與您需要的其他JavaScript文件一起加載。把所有文件放在所有頁面上,你就可以走了。文件只會被加載到第一頁,所以唯一的問題將是如何最小化首頁加載(當需要提取所有內容 - 這是一個不同的故事)

+0

我按照你的建議做了。我添加文件的方式如下所示:jquery,jqm和config。我的配置現在包含easytabs和swiper js內容。我在我的配置上使用了pageshow。我仍然需要重新加載swiper.js才能工作。我相信這是我將swiper添加到頁面展示的方式。 easytabs.js工作正常,但我還沒有將其添加到其他網頁...你或你可以建議一個正確的方法來添加功能? –

+0

$(文件)。在( 「pageshow」, 「#product」,函數(){ \t \t $(函數(){ \t \t變種mySwiper = $( '刷卡容器')。刷卡({ \t \t //你選擇這裏: \t \t模式: '橫向', \t \t循環:真正 \t \t //等。 \t \t}); \t \t}) \t \t $( '左箭頭 ')。在(' 點擊',功能(E){ \t \t \t e.preventDefault() \t \t \t mySwiper.swipePrev() \t \t}) \t \t $( '.arrow右 ')。在(' 點擊',函數(E){ \t \t \t e.preventDefault() \t \t \t mySwiper.swipeNext() \t \t}) \t \t $('#tab-container')。easytabs(); }); –

+0

我猜你的sw is不工作,因爲你啓動了'pageshow'上的插件(爲什麼不'pagebeforeshow'?),插件試圖綁定到DOM中沒有的東西。在啓動swiperjs後添加一個'console.log($('。arrow-left'))''。如果是這種情況,考慮在'document'上設置綁定並委託給你的元素='$(document).on(「click」,「.arrow-left」,function ...'這應該有所幫助。 – frequent

相關問題