2016-03-28 76 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好的,那么不要那么着急。评论已删除。 –