2016-03-28 124 views
2

JS:IMG的onclick不工作

htmlStr += '<table id="summary-table">' 
     + '<col width="200"><col width="315"><col width="600"><col width="1000">' 
     + '<tr><th>Month' 
     + '&nbsp;&nbsp;&nbsp;<img id="azsort-month" src="sort.png" alt="Sort by Alphabetical Order (A to Z)" style="width:20px; height:20px;">' 
     + '</th><th>Header2</th><th>Header3/th><th>Header4</th></tr>'; 

我都試過

htmlStr += '<table id="summary-table">' 
     + '<col width="200"><col width="315"><col width="600"><col width="1000">' 
     + '<tr><th>Month' 
     + '&nbsp;&nbsp;&nbsp;<img id="azsort-month" src="sort.png" onclick="alert("test")" alt="Sort by Alphabetical Order (A to Z)" style="width:20px; height:20px;">' 
     + '</th><th>Header2</th><th>Header3/th><th>Header4</th></tr>'; 

$(document).ready(function() { 
     $('#azsort-month').click(function(){ 
      alert("test"); 
     }); 
    }); 

$('#azsort-month').click(function(){ 
    alert("test"); 
}); 

htmlStr var是將JSON輸出顯示爲HTML表的函數的一部分;它適用於整個表除了在此img

+2

看在引號中:'onclick =「alert(」test「)」'。你有沒有注意到什麼?如果我寫'onclick =「alert(」'?至於jQuery方法,請參閱[由動態生成的元素觸發的事件不會被事件處理程序捕獲](http://stackoverflow.com/q/12829963/218196) –

+0

你應該嘗試使用$('#azsort-month')。on('click',function(){}); – Jainil

+0

這裏/如何將htmlstr插入到dom中,並在其中運行.ready() call?ref:http://stackoverflow.com/questions/6537323/jquery-function-not-binding-to-newly-added-dom-elements –

回答

3

你必須使用事件delegation click事件,爲#azsort-month IMG並沒有在當時存在您要附加該事件處理程序,所以:

$(document).on('click','#azsort-month',function(){ 
    alert("test"); 
}); 
+1

作品!另外,很高興知道;謝謝! – faalbane

+0

@SurrealDreams:*「事件委託會將事件添加到與.on()函數的第二個參數中的選擇器匹配的任何元素。」*這是不正確的。事件處理程序不會*添加到這些元素(它不可能是因爲這些元素可能還不存在!)。事件處理程序僅綁定到您在上面調用'.on'的元素(例如上例中的「document」)。然而,事件處理程序是*執行*只適用於匹配傳遞給'.on'的選擇器的元素,如果事件源自(在)它們之內。 –

+0

@FelixKling好的,那麼不要那麼着急。評論已刪除。 –