這是在顯示Tweet按鈕的窗體上運行的代碼 - 顯示多個圖像的窗體上的按鈕 - 當用戶單擊其中一個圖像時,它會變成「選定」圖像,Tweet按鈕應該是鳴叫所選圖像的名稱和網址:使用javascript動態設置按鈕「data-text」的內容,或者..?
<a id="tweetBtnId" href="https://twitter.com/share" class="twitter-share-button"
data-text="Check me out on OurWebSite!"
data-url=http://$ourSiteURL
data-via=http://$ourSiteURL data-size="medium" data-count="none">Tweet</a>
<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="//platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js,fjs);}}
(document,"script", "twitter-wjs");</script>
我對顯示圖像的DIV中加入「onClick()」處理程序。當用戶點擊其中一個圖像時,它的div的onclick()處理程序被調用並將該圖像設置爲頁面上的「currentlySelectedImage」,然後onclick()處理程序需要更新Tweet按鈕的「數據文本」與剛剛選擇的圖像屬性的名稱:
// This is part of the code of the 'onclick()' handler for
// the image being selected.
<script>
function handleImageOnClick()
{
var myDynamicTweetText = "name of currently-selected image goes here";
var elem = document.getElementById("tweetBtnId");
alert("The elem is: " + elem); // elem IS NULL !! Dagnabbit.
// this fails because 'elem' is null
elem.setAttribute("data-text", myDynamicTweetText);
// other onclick() code not shown for brevity......
}
</script>
我需要動態改變「數據文本」屬性的值在鳴叫按鈕是所選圖像的名稱。我添加高於該fails--從這裏的代碼所獲得的「ELEM」的JavaScript代碼:
var elem = document.getElementById("tweetBtnId");
爲空(我想),因爲這線在上述的Twitter鳴叫按鈕的代碼的:
if(!d.getElementById(id)){js=d.createElement(s); js.id=id;
我不確定,但看起來Twitter Twitter按鈕的默認腳本會覆蓋任何嘗試 向Tweet按鈕添加「id」屬性。
你會看到,我添加了ID =「tweetBtnId」到鳴叫按鈕的上方,我能得到訪問我的圖像選擇鳴叫按鈕的onclick()處理上面,然後設置「數據 - 文本'到剛剛選擇的圖像的名稱。
我只是懷疑Twitter的Tweet按鈕的設計目標是「我們要愚弄這個吸盤,我們只會讓這些動物選擇一個數據文本值 - 每個Tweet按鈕必須有一個硬盤 - 如果他們嘗試動態更改「Tweet」按鈕的數據文本屬性,則會在頁面上顯示「一次寫入」的數據文本屬性 - 笑話。「
我需要得到這個工作 - 任何想法?
只是螢火證實 - 鳴叫按鈕的ID是「B」,甚至沒有一個數。那麼Twitter腳本不會讓你很容易getElementById()。 – wantTheBest 2012-03-13 01:04:06
哇,我可以聽到窗外打鼾的蝸牛。今天安靜在這裏。一種超級解決方法是創建一個帶有一個隱藏字段的窗體,並在用戶單擊圖像時調用的onclick()處理程序中對其執行form.submit()。然後,我可以設置一個名爲「選定圖像」的PHP變量並將其重定向回原始頁面,並使用PHP變量作爲Tweet按鈕的「數據文本」部分,這樣當用戶發送PHP變量將所選圖像的名稱分配給推文按鈕中的「數據文本」。一個服務器的往返推文! DAGNABBIT。 – wantTheBest 2012-03-13 01:31:31
沒有人回答這個問題的原因是因爲它太長而且充滿代碼,可能與實際的核心問題無關。 – Domenic 2012-03-13 02:17:50