Jquery函数未注册

时间:2016-02-22 17:19:05

标签: jquery

我试图使用Jquery生成一个html表

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>');
})

然后为按钮ID注册事件 -

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

使用Jquery正确生成html表,但事件未被注册。

所有这些代码都在document.ready()函数

3 个答案:

答案 0 :(得分:0)

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

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

或者在您的具体情况下,您可以这样做:

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

始终将您的事件绑定到您知道在动态添加实际元素时始终存在的父元素,这样您就不必担心再次绑定事件。

答案 1 :(得分:0)

您正在动态附加控件,请尝试使用此控件。

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

答案 2 :(得分:-1)

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

上面的问题是它假设#edit0在加载这段代码时已经是DOM的一部分。

尝试将其更改为:

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

如果#edit0尚不存在但会成为DOM中其他内容的一部分,请尝试将$.on绑定到父容器,然后将其指向{{1} }:

#edit0

$('#parent').on('click', '#edit0', function() { alert('clicked') //load_datatable('N') }) 事件处理程序会将事件侦听器附加到HTML中存在的任何内容,无论它是否已加载。 $.on() here

的文档