jquery - 单击事件不适用于表中的动态创建按钮

时间:2016-01-27 13:13:00

标签: javascript jquery html

我已经看过这个问题的所有历史性答案,但似乎没有什么对我有用

在我的页面上单击按钮时,会显示一个div框并添加一个表

$('#NewParentItem').click(function() { 

InnerTable =  "<table width='90%' bgcolor='#CCCCCC' align='center'  >"
InnerTable += "<tr height='12px'> "
InnerTable += "<td width='2%'></td> "   
InnerTable += "<td width='68%' style='text-align:center' > <input type='text' name='Item' placeholder='Main Item Name' size='12'> </td> "   
InnerTable += "<td width='30%'> <button type='button' id='NewParentSubmit' value='generate new element' >Enter </button>  </td> "
InnerTable += "</tr> </table>" 
DisplayUniDiv(160,200,50,200) // display div box
$('#UniDivHead').html("Add New Main Group Item (Parent)")           
$('#UniDivBody').html( InnerTable )         
}) ; // End of Function `  

此表现在包含一个ID为NewParentSubmit

的按钮

在我的剧本中,我有以下

$(document).on('click', '#NewParentSubmit' , function() {
    alert(" Submit ")  
    }) ;     // End of Function

我现在希望在用户点击按钮时触发(在动态创建按钮之后)但是没有发生任何事情?

所有这些功能都包含在

$(document).ready(function() { 

});

有人可以提供解决方案或一些建议吗?

谢谢

2 个答案:

答案 0 :(得分:2)

看看https://jsfiddle.net/1waumb6d/

$(document).ready(function()
{
$('#NewParentItem').click(function() { 

InnerTable =  "<table width='90%' bgcolor='#CCCCCC' align='center'  >"
InnerTable += "<tr height='12px'> "
InnerTable += "<td width='2%'></td> "   
InnerTable += "<td width='68%' style='text-align:center' > <input type='text' name='Item' placeholder='Main Item Name' size='12'> </td> "   
InnerTable += "<td width='30%'> <button type='button' id='NewParentSubmit' value='generate new element' >Enter </button>  </td> "
InnerTable += "</tr> </table>" 
//DisplayUniDiv(160,200,50,200) // display div box
$('#UniDivHead').html("Add New Main Group Item (Parent)")           
$('#UniDivBody').html( InnerTable )         
}) ; 
});

$(document).on('click', '#NewParentSubmit' , function() {
    alert(" Submit ")  
    }) ; 

Enter按钮正在按预期工作。

答案 1 :(得分:0)

JQuery在调用代码时附加事件处理程序。因此,如果在$(Document).ready()被触发后创建按钮,它将不会附加事件处理程序,即使它与元素匹配。

请记住,当你拨打$('#Id')时,点击(function(){});您正在运行一个针对DOM的脚本,因为它在被调用时就存在了。所有你真正说的是。 “给我所有与选择器匹配的元素,当你点击它时,给它点击一个处理函数的点击处理程序”(

因此,如果按钮是在触发后创建的,则需要再次重新运行该位代码。我还建议您分离一些代码,这样您就可以在不在多个地方编写代码的情况下完成此操作

所以试试这个:

function generateHTML() {
    var InnerTable =  "<table width='90%' bgcolor='#CCCCCC' align='center'  >";
    InnerTable += "<tr height='12px'> "
    InnerTable += "<td width='2%'></td> " ;  
    InnerTable += "<td width='68%' style='text-align:center' > <input type='text' name='Item' placeholder='Main Item Name' size='12'> </td> "  ; 
    InnerTable += "<td width='30%'> <button type='button' class='NewParentSubmit' value='generate new element' >Enter </button>  </td> ";
    InnerTable += "</tr> </table>";
    return InnerTable;
}

function setButtonEvent() {
    $('.NewParentItem').click(function() { //notice change to class from ID here
         generateTable();
    });
}

function generateTable() {
    DisplayUniDiv(160,200,50,200); // display div box
    $('#UniDivHead').html("Add New Main Group Item (Parent)");          
    $('#UniDivBody').html( generateHTML());
    setButtonEvent();       
}

$(document).ready(function() {
    generateTable();
});