2012-01-30 53 views
0

如果您轉到http://www.elemovements.com並嘗試單擊第一篇文章中的「閱讀更多......」,它將與單擊存檔中的同一鏈接一起工作。這一切都由這個代碼塊來處理......這很麻煩,是的,但我一直在努力想辦法做到這一點。jQuery .on()在加載不同內容後無法工作

(function() { 

    var $Body = $("#news .inner"); 
    var $Title = $("#news .title"); 

    var strNewsURL = "<?=URL_NEWS?>"; 

    $(document).on("click", "a:contains(Read More...)", function(event) { 

     var strOld = $Body.html(); 
     var strURL = $(this).attr("href").replace("index.php", strNewsURL); 

     //var strBackURL = strURL.match(/archive.php/) ? "archive.php?xnewsaction=getnews&newsarch=" + getURLVars(strURL)['newsarch'] : strNewsURL; 

     $Body.slideUp(100); 

     $.get(

      strURL, 

      objNHF, 

      function(strData) { 

       $Body.html(strData + '<a class="back"><?=TEXT_BACK?></a>').slideDown(1000, "easeOutBounce"); 

       $(document).on("click", "#news a.back", function(event) { 

        $Body.slideUp(100, function() { 

         $(this).html(strOld); 

        }).slideDown(1000, "easeOutBounce");; 

        event.preventDefault(); 

       }); 

      } 

     ); 

     track(strURL); 

     event.preventDefault(); 

    }); 

})(); 

如果嘗試加載其他頁面(比方說,「聯繫方式」),然後點擊「首頁」再次觸發該事件,但沒有內容加載到股利。我在這裏做錯了什麼?非常令人費解。

回答

1

這些變量的on/live點擊之外聲明。加載新內容時,這些元素將被替換,並且變量指向舊副本。

var $Body = $("#news .inner"); 
var $Title = $("#news .title"); 

移動點擊所以他們每次刷新裏面這些變量:

$(document).on("click", "a:contains(Read More...)", function(event) { 

    var $Body = $("#news .inner"); 
    var $Title = $("#news .title"); 
... 
+0

**我只是試圖在同一時間發佈!**哈哈。不幸的是,我的名聲不允許我回答我自己的問題,所以,爲你而忙。不管怎麼說,還是要謝謝你。 – 2012-01-31 02:25:26

+0

但是,我也遇到了一個新問題(唉)。不是用戶會這樣做,但如果您多次點擊「閱讀更多...」,並在第二次或更高的運行時點擊「<<返回」,內容會減少您曾經去過的次數。事件肯定會越來越激烈。任何人? – 2012-01-31 02:30:22

+0

啊,這是因爲'a.back'處理程序應該是一個簡單的'click()',而不是'on()'。感謝大家。 – 2012-01-31 02:44:35

0

我不認爲你可以使用僞選擇器的委託事件處理程序。爲了解決這個問題只需要使用HTML結構鏈接周圍,你的優勢:

$(document).on('click', '.more a', function() {...}); 

這是一個好主意,反正因爲:contains僞選擇是相當緩慢。 a:contains(Read More...)必須遍歷頁面上的每個鏈接,並獲取它的文本進行檢查。

+0

什麼是令人費解的是它在第一次運行正常,但如果我改變同一div的內容,其中#news DIV是,然後重新加載#news div,它不會工作。 – 2012-01-30 23:22:44

+0

我只是嘗試在該類名稱的鏈接上添加一個範圍,附加事件,但仍然遇到同樣的問題。雖然我同意這種方法更合乎邏輯,但是我插入了一個新聞系統,並且我不想通過數千行代碼修改其HTML。無論如何,這只是一個原型,因爲它是此網站上此類鏈接的第一個實例。 – 2012-01-30 23:27:58

0

你的選擇是空

http://jsfiddle.net/qRWa5/21/

+0

如果他/她使用'on()',那麼他/她使用的是jQuery 1.7+,其中'live()'的版本已被棄用(推薦使用'on()')。在版本1.7之前''delegate()'是首選的。 – 2012-01-31 00:39:49

+0

好點。但on()沒有按預期工作,而live()會。 – Fresheyeball 2012-01-31 00:41:39

+0

我試過live(),但似乎失敗了。它看起來好像on()取代了live()?這裏是一個jsFiddle來演示相同的想法:http://jsfiddle.net/grn2012/qRWa5/20/ – 2012-01-31 00:43:12

相關問題