2016-02-22 70 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') 
})