为使用 jQuery 动态创建的按钮添加单击事件

IT技术 javascript jquery html
2021-03-20 16:52:38

如何在使用 jQuery 动态添加的按钮上添加按钮单击事件?

div容器中添加动态按钮的 jQuery 代码

$('#pg_menu_content').empty();
$div = $('<div data-role="fieldcontain"/>');
$("<input type='button' value='Dynamic Button' id='btn_a' />").appendTo($div.clone()).appendTo('#pg_menu_content');

问题1: 如何为上面的按钮添加点击事件?我试过下面的,它没有触发

$("#btn_a").click(function(){
  alert ('button clicked');
});

问题2: 如何获取click事件中按钮的值?例如,我想在单击事件函数中获取值“动态按钮”。

你们能帮我解决这个问题吗?

4个回答

使用绑定到容器的委托事件处理程序:

$('#pg_menu_content').on('click', '#btn_a', function(){
    console.log(this.value);
});

也就是说,绑定到 JS 运行时存在的元素(我假设#pg_menu_content页面加载时存在),并将第二个参数中的选择器提供给.on(). 当在#pg_menu_content元素上发生单击时,jQuery 检查它是否应用于与#btn_a选择器匹配的该元素的子元素

创建按钮后,要么绑定标准(非委托)单击处理程序。

无论哪种方式,在点击处理程序中this都会引用有问题的按钮,所以this.value会给你它的值。

如果元素已经存在,看起来这将导致处理程序触发两次。
2021-04-21 16:52:38
@JihoKang - 不,不是。为什么会呢?只有一个处理程序。
2021-05-04 16:52:38
this 是一个原始的 DOM 元素,因此需要重新包装 jquery 功能,即, $(this)
2021-05-09 16:52:38

利用

$(document).on("click", "#btn_a", function(){
  alert ('button clicked');
});

为动态创建的按钮添加侦听器。

alert($("#btn_a").val());

会给你按钮的value

只需使用 jQuery 创建一个按钮元素,并在创建它时添加事件处理程序:

var div = $('<div />', {'data-role' : 'fieldcontain'}),
    btn = $('<input />', {
              type  : 'button',
              value : 'Dynamic Button',
              id    : 'btn_a',
              on    : {
                 click: function() {
                     alert ( this.value );
                 }
              }
          });

div.append(btn).appendTo( $('#pg_menu_content').empty() );

小提琴

问题 1.delegate在 div 上使用将点击处理程序绑定到按钮。

问题 2在点击处理程序中使用$(this).val()or this.value(后者会更快)。 this将参考按钮。

$("#pg_menu_content").on('click', '#btn_a', function () {
  alert($(this).val());
});

$div = $('<div data-role="fieldcontain"/>');
$("<input type='button' value='Dynamic Button' id='btn_a' />").appendTo($div.clone()).appendTo('#pg_menu_content');