html动态生成按钮事件,javascript-jQuery-动态创建按钮并附加事件指针

博客讨论了在jQuery中如何动态向表格中添加按钮,并确保按钮带有click事件处理程序。问题在于原始代码在将按钮添加到表格时丢失了事件。解决方案包括使用.append()和.on()方法来正确地添加和绑定事件处理程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javascript-jQuery-动态创建按钮并附加事件指针

我想使用jQuery向表中动态添加按钮控件,并附加click事件处理程序。 我尝试了以下操作,但没有成功:

$("#myButton").click(function () {

var test = $('Test').click(function () {

alert('hi');

});

$("#nodeAttributeHeader").attr('style', 'display: table-row;');

$("#addNodeTable tr:last").before('

' + test.html() + '');

});

上面的代码成功添加了新行,但是不能正确添加按钮。 我将如何使用jQuery完成此操作?

senfo asked 2020-08-10T05:40:42Z

5个解决方案

55 votes

调用$()会将元素序列化为字符串,因此所有事件处理程序和其他关联数据都将丢失。 这是我的处理方式:

$("#myButton").click(function ()

{

var test = $('',

{

text: 'Test',

click: function () { alert('hi'); }

});

var parent = $('

').children().append(test).end();

$("#addNodeTable tr:last").before(parent);

});

要么,

$("#myButton").click(function ()

{

var test = $('',

{

text: 'Test',

click: function () { alert('hi'); }

}).wrap('

').closest('tr');

$("#addNodeTable tr:last").before(test);

});

如果您不喜欢将属性映射传递给$(),则可以改用

$('')

.text('Test')

.click(function () { alert('hi'); });

// or

$('Test').click(function () { alert('hi'); });

Matt Ball answered 2020-08-10T05:40:56Z

9 votes

快速解决。创建整个结构tr> td> button; 然后在里面找到按钮; 附加事件 结束链的过滤,然后将其插入dom。

$("#myButton").click(function () {

var test = $('

Test').find('button').click(function () {

alert('hi');

}).end();

$("#nodeAttributeHeader").attr('style', 'display: table-row;');

$("#addNodeTable tr:last").before(test);

});

Schovi answered 2020-08-10T05:41:17Z

8 votes

您的问题是,当您将按钮添加到表中时,您正在将其转换为HTML代码段,但是该代码段与带有单击处理程序的对象不同。

$("#myButton").click(function () {

var test = $('Test').click(function () {

alert('hi');

});

$("#nodeAttributeHeader").css('display', 'table-row'); // NB: changed

var tr = $('

').insertBefore('#addNodeTable tr:last');

var td = $('

').append(test).appendTo(tr);

});

Alnitak answered 2020-08-10T05:41:37Z

0 votes

您可以在按钮内部使用onclick来确保事件被保留,或者可以在按钮插入后通过查找按钮来附加按钮单击处理程序。 test.html()调用不会序列化事件。

Brett Zamir answered 2020-08-10T05:41:57Z

0 votes

您只是添加了html字符串。 不是您使用click事件监听器创建的元素。

试试这个:

Row 1

Row 2

$(document).ready(function() {

var test = $('Test').click(function () {

alert('hi');

});

$("#addNodeTable tr:last").append('

').find("td:last").append(test);

});

jnoreiga answered 2020-08-10T05:42:21Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值