我已经看过这个问题的所有历史性答案,但似乎没有什么对我有用
在我的页面上单击按钮时,会显示一个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() {
});
有人可以提供解决方案或一些建议吗?
谢谢
答案 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();
});