2013-06-28 121 views
1

我有一個頁面,用戶點擊一個按鈕(「生成」)動態生成隨機短語使用從json文件拉的文本。該短語放置在一個div(#generated)中,替換之前存在的內容(單擊按鈕之前)。生成這個短語完美無缺。我現在要添加的內容是用戶點擊推文按鈕分享該短語的一種方式。jQuery延遲點擊後「複製」文本

這裏的鳴叫按鈕代碼:

<div id="tweet_button"> 
<a href="http://twitter.com/share" 
class="twitter-share-button" 
data-text="This is what we want to change dynamically" 
data-count="none">Tweet</a></div> 

加上這頭:

<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> 

data-text就是我正在尋找後的按鈕使用div的內容鳴叫按下。這裏是我的問題:

首先,如果嘗試這個辦法:

$(document).ready(function(){ 
$.getScript('http://platform.twitter.com/widgets.js'); 
$('a[data-text]').each(function(){ 
$(this).attr('data-text', $('#generated').text()); 
}); 
}); 

那當然,從「這是我們要動態地改變」什麼是在div「生成」以前data-text變化按鈕被按下(即文檔準備好時有什麼),這不是我想要的。所以,我想我可以利用這個代碼,並data-text將改變到div的新生成的內容:

$("generate").click(function() { 
setTimeout(function(){ 
$.getScript('http://platform.twitter.com/widgets.js'); 
$('a[data-text]').each(function(){ 
$(this).attr('data-text', $('#generated').text()); 
}); 
}, 
1000); 
}); 

在我看來,這會等到「生成」按鈕被點擊,一秒鐘的延遲(以確保div內容更改),然後用div的新內容更新data-text。當然,這是行不通的。

理想情況下,每次單擊「生成」按鈕時都會更新data-text。似乎可能有辦法做到這一點(https://dev.twitter.com/discussions/890)的一部分,但現在我只是擔心如上所述的第一部分。

希望這是有道理的...任何想法如何實際做到這一點?感謝這位新手的支持。

+0

你爲什麼在這裏使用$ .getScript?我不明白 –

+0

事後看來,可能不需要這一行,因爲我在標題中有這個完整的twitter腳本,但是你認爲這是問題嗎?我刪除了該行,並沒有產生任何影響。 – jonmrich

+0

當然,你不應該加載腳本兩次,但我不認爲它是你的問題。事實上,我不太瞭解你的問題。您應該將您的點擊處理程序包裝在文檔中。檢查你的點擊事件是否被解僱。但是,從哪裏來的動態文本,以及如何? –

回答

2

我弄得像 「再生」 鳴叫按鈕:

http://jsfiddle.net/mattydsw/xAq5t/

$("#generate").click(function() { 
    $("#tweet_button").empty(); 
    $("#tweet_button").append('<a href="http://twitter.com/share" class="twitter-share-button" data-text="' + $('#generated').text() + '" data-count="none">Tweet</a>'); 
    twttr.widgets.load(); 
}); 

當然,你應該調整它,因爲你用AJAX功能改變 「#generated」

的文本編輯

也許是這樣的

$("#generate").click(function() { 
    $('#generated').load('data.txt', function() { 
     $("#tweet_button").empty(); 
     $("#tweet_button").append('<a href="http://twitter.com/share" class="twitter-share-button" data-text="' + $('#generated').text() + '" data-count="none">Tweet</a>'); 
     twttr.widgets.load(); 
    }); 
}); 
+0

單擊「生成」後文本應該更改。 – mkutyba

+0

我現在看到。它在小提琴中爲我工作,但我無法在我的網頁中工作。添加了獲取最新jquery(「jquery-latest.min.js」)的調用,但我顯然錯過了一些東西。我在小提琴的「Frameworks&Extensions」部分看到,jquery設置爲「onLoad」。我的版本顯然不是這樣做的。如何將該部分添加到我自己的代碼中以匹配與小提琴相同的動作? – jonmrich

+0

http://learn.jquery.com/using-jquery-core/document-ready/ – mkutyba