2011-03-16 102 views
1

我使用Ajax生成內容,因此需要使用.live()將函數附加到生成的鏈接上的click事件。它似乎不工作,不幸的是,我不知道爲什麼。我試着把它放在準備好的環境裏面和外面;沒有運氣。當我僅僅使用$('a').click()時,它正在工作,但對於從Ajax中取出的鏈接無效。有什麼想法嗎?jQuery live功能不是,運行良好

$(document).ready(function(){ 
    $('#content a').live('click', function(){ 
     var moveIt = $("#content").outerWidth(); 
     alert(moveIt); 
     $('#content').animate({'maxWidth': '+=' + moveIt/2 + 'px', 'left': '6%'}, 'slow'); 
    }); 

    $('a.back').live('click',function(){ 
     $('#content').animate({'maxWidth': '360px', 'left' : '43%'}, 400); 
    }); 
}); 

而這裏的HTML:

<section id="content" class="textiles"><!--content start--> 
<div id="ajax-container"> 
    <div id="ajax-content"><!--test--> 
     <h1>Installations</h1> 
     <a rel="bookmark" href="http://www.qp2creative.com/clients/dfrank/installations/light-fixtures" title="light&nbsp;fixtures"><img src="http://www.qp2creative.com/clients/dfrank/images/51t.jpg" alt="Seating Area with Light Fixtures" height="64" width="140"></a> 
     <a rel="bookmark" href="http://www.qp2creative.com/clients/dfrank/installations/scad-fibers-installation" title="SCAD fibers&nbsp;installation"><img src="http://www.qp2creative.com/clients/dfrank/images/49t.jpg" alt="Installation in Context" height="64" width="140"></a> 
     <a rel="bookmark" href="http://www.qp2creative.com/clients/dfrank/installations/other-gallery" title="fashion 2008&nbsp;photoshoot"><img src="http://www.qp2creative.com/clients/dfrank/images/47t.jpg" alt="fashion's backdrop" height="64" width="140"></a> 
     <a rel="bookmark" href="http://www.qp2creative.com/clients/dfrank/installations/qp2-creative-gallery" title="QP2 Creative&nbsp;Gallery"><img src="http://www.qp2creative.com/clients/dfrank/images/41t.jpg" alt="QP2 Creative gallery" title=""></a> 
     </div> 
    </div><!--end ajax container--> 
</section><!--end content--> 
+0

什麼是html? – Neal 2011-03-16 18:50:05

+0

@maniator我會用它更新問題。 – qp2wd 2011-03-16 18:51:41

+0

把這個放到jsfiddle中,它肯定[做某事](http://jsfiddle.net/NZUvT/)點擊。什麼不工作? – justkt 2011-03-16 18:56:09

回答

4

body標籤內的JavaScript代碼搞亂了頭標籤中的腳本。在您的正文標籤 a 點擊約束返回假」。並停止進一步調用任何「單擊」綁定。

我在代碼中發現了三個問題。糾正它後,我得到了警報框。

  1. 將代碼封裝在$(document).ready(function(){ });中,就像您在您的問題中一樣(但它不在演示網站中)。
  2. 在你body標籤relink: function() { - 評論說: 「返回false;」 和
  3. 糾正分號 smd_ajax.spinit(1)丟失;

    if ((site_url.indexOf(url.host) >= 0) && (bindit == true)) { 
        smd_ajax.spinit(1); //HERE 3rd Edit. 
        jQuery(this).unbind(); 
        smd_ajax.grab(this.href); 
        //return false; //HERE 2nd Edit. 
    } 
    

您可以使用preventDefault();停止默認行爲。

$(document).ready(function(){ 
    $('#content a').live('click', function(e){ 
     var moveIt = $("#content").outerWidth(); 
     alert(moveIt); 
     $('#content').animate({'maxWidth': '+=' + moveIt/2 + 'px', 'left': '6%'}, 'slow'); 
     e.preventDefault(); //Hyperlink won't load page link. 
    }); 
    $('a.back').live('click',function(){ 
     $('#content').animate({'maxWidth': '360px', 'left' : '43%'}, 400); 
    }); 
}); 
+0

我可以吻你的先生!這工作很好。我將不得不提及這個解決方案給那位創建我用於Ajax的插件的紳士,看看你的修補與腳本中的其他內容是否有衝突,儘管目前看起來還是非常出色。一千次感謝你。 :) – qp2wd 2011-03-16 20:44:39

0

你已經採取了看看.delegate()?它幾乎與.live()一樣,但允許您指定一個額外的選擇器來過濾任何觸發的元素。

$('#content').delegate('a', 'click', function() { 
    // code here 
} 

不知道爲什麼你的具體的例子不工作,但如果你有至少jQuery的1.4.2,嘗試更新到.delegate()

+0

我看看'.delegate()',但想看看我能不能讓'.live()'工作。現在嘗試它...並沒有骰子。這是一個到現場的鏈接;也許有一些其他的jQuery影響它? http://www.qp2creative.com/clients/dfrank/installations/ – qp2wd 2011-03-16 19:13:47

+0

你的意思是不工作?我可以點擊圖片並返回。還有什麼應該做的嗎? 如果可能的話,最好在'.live()'之上使用'.delegate()',如果你不需要在DOM樹上一直冒泡。 – scurker 2011-03-16 19:17:44

+1

我應該提到我使用的是Firfox 3.6,所以也許你遇到了一些奇怪的瀏覽器問題。 – scurker 2011-03-16 19:20:27

0

我看了一下你的網站 - 我真的不能解釋您的警報不工作,但似乎Ajax實現是一個有點令人費解。我想你可能會簡化它,並完全避免怪異的委託/現場問題。

您是否考慮過使用簡單的jQuery.ajax或jQuery.load函數來更改動態內容?我知道這些函數有回調函數,可以讓你在ajax調用完成後運行後續的「成功」函數。也許其中一個回調將是一個運行調整大小功能的好地方?

+0

ajax是複雜的,因爲它是通過我使用的CMS插件實現的 - 我對jQuery的知識幾乎都是新手級別,而且我對ajax的瞭解比這還要低,所以插件對我來說更容易纏住我的頭。將調整大小功能包裹到成功回調中並不是一個壞主意;如果它涉及if/else,它可能最終會對我的技能水平有點太複雜。 – qp2wd 2011-03-16 21:00:07