2011-11-01 32 views
2

所有前頁按鈕的jquery的clone()後會失去點擊事件處理

我的問題如下:

我有包含前頁按鈕的頁面。通常,點擊會打開一個小菜單。

在某些時候,這個頁面的某些部分 - 包括addthis-button - 會被克隆(通過jQuery)並在同一頁面上重用。

如果我單擊克隆按鈕,菜單不會打開,並且加載此頁面。

所以,顯然事件處理程序會丟失,並且該按鈕(它實際上是一個<a>)會恢復爲鏈接並顯示鏈接的頁面。

那麼如何重新註冊克隆按鈕的事件呢?

ETA:澄清:我想克隆addthis_button完成addthis_widget.js所做的一切。 mylittlebutton及其點擊處理程序clickedhim()與問題無關,它們只觸發addthis_button的克隆。

如果有人能指點我正確的方向 此外,我有一個20行代碼片段,說明這一點,如果有幫助。

謝謝

ETA: 代碼片段:

<script src='../../js/lib/jquery-1.6.2.js' type="text/javascript"></script> 

<!-- up to here, the original button is initialized --> 
<a class="addthis_button addthis_button" href="http://www.addthis.com/bookmark.php?v=250"> 
    <img src="../../resources/img/button_share.gif" width="59" height="17" alt="Bookmark and Share" style="border:0"/> 
</a> 
<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js"></script> 


<br /> 

<!-- button to trigger the cloning --> 
<input type="button" id="mylittlebutton" onclick="clickedhim(this);" value="CLICK ME" /> 

<script type="text/javascript" > 
function clickedhim(eventtarget) { 
    var nearest_addthis = $(eventtarget).siblings("a.addthis_button"); 
    // clone button, and insert it after the original 
    nearest_addthis.after(nearest_addthis.clone()); 
} 
</script> 

回答

3

好吧,我解決了這個問題。

按照Addthis Client API,任何不知情的元素可以變成一個addthis.button與

<script type="text/javascript"> 
addthis.button("#atbutton"); 
</script> 

所以,當我克隆我的元素,我叫

addthis.button(".addthis_button"); 

,一切就像一個魅力。

謝謝大家的幫助。

附錄:上面的工作初始化個人做任何事AddThis按鈕。如果您有個別按鈕控件,如電子郵件,Facebook的,等等,你將需要使用

addthis.toolbox('<parent element>');

初始化這些控件。

0

clone documentation說:.clone([withDataAndEvents] [,deepWithDataAndEvents]。所以,你可以通過2個布爾參數取決於你的需求

所以我覺得你想要做的事就像

var clone = $("a").clone(true); 
+0

感謝您的快速回答。不幸的是,'克隆= $(「a」)。clone(true);''和'var clone = $(「a」)。clone(true,true);'具有和以前相同的效果:addthis頁面是加載。 – dannyKay

+0

你不能像'addthis.button(克隆);'? –

+0

顯然語法是'elementToClone.clone()'...我會編輯我原來的帖子以包含我的代碼片段,以便您可以看到我在做什麼。 – dannyKay

0

嘗試使用委託方法上面的例子:http://api.jquery.com/delegate/到事件附加到按鈕( S)。

+0

有趣。給我一點時間試試 – dannyKay

+0

我已經看過它了,而且它似乎是委託,我需要知道處理程序的名稱,我基本上不會......也許我從錯誤的角度看待這個側。也許解決方案不是直接處理事件,而是強制addthis腳本再次執行克隆的按鈕? – dannyKay

+0

是不是處理程序'clickedhim'的名稱? –

0
<input type="button" class="mylittlebutton" value="CLICK ME" /> 

$('.mylittlebutton').live('click', clickedhim, { eventtarget: this }); 

您還應該添加有關使用克隆時處理您的按鈕ID一些邏輯()

編輯:http://jsfiddle.net/UJ5JM/

+0

我想我們在這裏有一點誤解:-)這個片段只是一個小的模擬,而'mylittlebutton'什麼也沒有做,只能觸發克隆過程。如果您點擊新克隆按鈕,*點擊「mylittlebutton」後,* real *問題就會變得明顯。 – dannyKay

+0

http://jsfiddle.net/UJ5JM/據我所知,你正在做更復雜的邏輯與按鈕被追加,但它應該工作相同。 – jbabey

+0

'mylittlebutton'與這個問題無關。 'mylittlebutton'只能在那裏克隆'.addthis_button',問題是'.addthis_button'的克隆。另一方面,我不知道jsfiddle。感謝您啓發我 – dannyKay