2016-02-22 72 views
0

进出口试图生成使用jqueryJquery的功能没有被注册

slicedata.forEach(function(e, i, a) { 
    var obj = e; 
    $('#ticket-table').append('<tr><td>' + obj.created_dt + '</td><td>' + obj.ticket_num + '</td> <td>' + obj.division + '</td><td>' + obj.pg + '</td> <td>' + obj.duration + '</td><td>' + obj.error_count + '</td><td>' + obj.outage_caused + '</td><td>' + obj.system_caused + '</td><td>' + obj.addt_notes + '</td><td><button id="edit' + i + '"">edit</button></td></tr>'); 
}) 

一个HTML表,然后注册用于按钮ID的事件 -

$('#edit0').click(function() { 
    alert('clicked') 
    //load_datatable('N') 
}) 

HTML表被生成正确使用jQuery但事件未被注册。

所有这些代码是的document.ready()函数内部

+0

第二个代码块何时与第一个代码块相关地运行 - 在之前还是之后? –

+0

它在第一个之后运行。 – user1050619

+0

你在寻找'.each()'函数吗? http://api.jquery.com/jquery.each/ – Dave

回答

-1
$('#edit0').click(function() { 
     alert('clicked') 
      //load_datatable('N') 
    }) 

的问题与上述的是,它假定#edit0已经通过它加载这段代码时的DOM的一部分。

尝试将其更改为:

$('#edit0').on('click', function() { 
     alert('clicked') 
      //load_datatable('N') 
    }) 

如果#edit0还不存在,但将是其他人在DOM事物的一部分,尽量结合​​$.on到父容器代替,然后指着它#edit0

$('#parent').on('click', '#edit0', function() { 
      alert('clicked') 
       //load_datatable('N') 
     }) 

$.on()事件处理程序将附加一个事件监听器来任何存在于HTML,无论是已经加载与否。 .on()here

+4

呃,'$('#edit0')。on()'也假设。当调用on()时,它需要指向DOM中存在的东西。 – Dave

+0

你的答案现在自相矛盾 - 你有两种不同的方式来处理“if##edit0'在dom中不存在”,其中只有其中一个实际上可行。 –

0

的文档尝试将您的事件绑定到父元素而不是动态生成的元素。

$("body").on("click", "#edit0", function() { 
    alert("clicked"); 
}); 

或者在特定情况下,你可以这样做:

$("#ticket-table").on("click", "#edit0", function() { 
    alert("clicked"); 
}); 

始终将事件绑定到你知道是永远存在的,当动态添加您的实际元素的父元素,让你不会不得不担心再次发生事件。

0

您正在动态追加控件,所以试试这个。

$('body').delegate('input[id*="edit"]','click',function() { 
    alert('clicked') 
    //load_datatable('N') 
})