2012-03-06 131 views
0

我使用JQuery追加圖像,像這樣:奇怪的Javascript行爲

$('#event_list_main').append('<img class="listed_event" id="event_'+event_counter+'" data-count="'+event_counter+'" src="final_tutorial_buttons/event.png" height="50" width="50" onclick="highlight();" />'); 

我分配一個highlight函數來創建和附加每個圖像!問題是高亮功能不執行。

//Highlight function 
function highlight() 
{ 
    var indicator = $(this).data("count"); 
    alert(indicator); 

} 

「這個」部分似乎沒有工作。我希望這是指每個創建的事件。

例如,如果我創建了3個事件

event_1 event_2 event_3

,我點擊 「圖像event_2」,那麼 「這個」 必須參照 「圖像event_2」

+0

你能否確認'highlight'是一個全局函數? – 2012-03-06 12:47:30

+0

此外,請考慮將「click」事件委託給「#event_list_main」元素...... – 2012-03-06 12:49:15

回答

4

嘗試onclick="highlight.call(this);"

但是,它會是太多更清潔以正確附加事件處理程序:

var img = $('<img class="listed_event" id="event_'+event_counter+'" data-count="'+event_counter+'" src="final_tutorial_buttons/event.png" height="50" width="50" />'); 
img.on('click', highlight); 
$('#event_list_main').append(img); 

甚至更​​易讀:

var img = $('<img/>', { 
    'class': 'listed_event', 
    id: 'event_' + event_counter, 
    src: 'final_tutorial_buttons/event.png' 
}).height(50).width(50).data('count', event_counter).on('click', highlight); 
$('#event_list_main').append(img); 
+0

這樣會更清晰:'var img = $('').attr({class:'listed_event' ,id:'event_'+ event_counter,'data-count':event_counter,src:'final_tutorial_buttons/event.png'})。click(highlight).appendTo('#event_list_main')'。當然,有幾條路線。 – 2012-03-06 12:49:20

+0

模板更清晰。 – 2012-03-06 12:50:02

1

這不是意外的行爲,你不及格的this值。但你期待它,因爲jQuery自動爲你做。

這是一個簡單的辦法:

$('#event_list_main').append('<img class="listed_event" id="event_'+event_counter+'" data-count="'+event_counter+'" src="final_tutorial_buttons/event.png" height="50" width="50" onclick="highlight.call(this);" />'); 

即使它最好能夠連同取代了一切:

$('<img class="listed_event" id="event_' + 
    event_counter + '" data-count="' + 
    event_counter + '" src="final_tutorial_buttons/event.png" height="50" width="50" />') 
    .click(highlight).appendTo("#event_list_main"); 

請參閱this職位更多有關如何call()apply()this