2013-10-27 53 views
1

在我的HTML我有一個屏幕,約25張縮略圖,而他們每個人都有格式相似的按鈕:抓鬥屬性點擊 - 使用上的單擊事件處理

<input type="button" class="btn btn-primary btn-small" id="likeBtn" data-id="545206032225604" value="Like"> 

其中,data-ID對於每個圖像都是不同的。

這個想法是,然後使用該ID來向Facebook圖形API發出POST請求,並像發佈一樣。

我有一個事件偵聽器,像這樣:

$('#likeBtn').click(function() { 
    facebook.likePhoto(controller.likeReady); 
}); 

我遇到的問題是,我不知道該如何抓住從實際點擊的元素數據-ID。

讓我知道,如果我可以提供任何更多的信息。

感謝

回答

2

使用.data()

$('#likeBtn').click(function() { 
    var data_id = $(this).data('id'); 
    facebook.likePhoto(controller.likeReady); 
}); 

this

Id屬性必須是唯一的。使用類而不是。

改變HTML

使用類likeBtn而不是ID likeBtn,你說你有很多按鈕,像這樣的。

<input type="button" class="btn btn-primary btn-small likeBtn" data-id="545206032225604" value="Like"> 

野老您js變得

$('.likeBtn').click(function() { 
    var data_id = $(this).data('id'); 
    facebook.likePhoto(controller.likeReady); 
}); 

Two HTML elements with same id attribute: How bad is it really?

OP的評論

使用.on()

由於eleme後更新nts是動態添加的,因此您無法直接將事件綁定到它們。所以您必須使用Event Delegation

$(document).on('click','.likeBtn',function() { 
    var data_id = $(this).data('id'); 
    facebook.likePhoto(controller.likeReady); 
}); 

語法

$(elements).on(events, selector, data, handler); 
+0

好了,我已經和它改爲一類像上面和取出ID = 「likeBtn」。 但是我現在意識到我的事件處理程序甚至沒有註冊點擊,所以代碼永遠不會被執行。 $('。likeBtn')。點擊(函數(){ \t \t VAR data_id = $(本)。數據( 'ID'); \t \t的console.log(data_id); //facebook.likePhoto(controller.likeReady); }); 有沒有什麼你可以看到錯誤的處理程序本身,或任何想法還有什麼可以造成這種情況? – Reece

+0

抱歉沒有意識到評論會格式化得很糟糕,我的不好。 – Reece

+0

@Reece這些像按鈕是動態生成的嗎? –

0

試試這個:

$('#likeBtn').click(function() { 
    var dataId = $(this).prop('data-id'); 
    console.log(dataId); //or do something else 

    facebook.likePhoto(controller.likeReady); 
}); 

不過,如果我理解正確的這個,你有沒有用id likeBtn多個元素?

0
$('#likeBtn').click(function() { 
    var id; 

    id = $(this).attr('data-id'); 
    facebook.likePhoto(controller.likeReady); 
});