如何在使用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事件中获取按钮的值?例如,我想在click事件函数中获取值“Dynamic Button”。
你能帮我解决这个问题。
答案 0 :(得分:73)
使用绑定到容器的委托事件处理程序:
$('#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
会为您提供其值。
答案 1 :(得分:27)
使用
$(document).on("click", "#btn_a", function(){
alert ('button clicked');
});
为动态创建的按钮添加侦听器。
alert($("#btn_a").val());
将为您提供按钮的值
答案 2 :(得分:9)
只需使用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() );
答案 3 :(得分:3)
问题1 :在div上使用.delegate
将点击处理程序绑定到按钮。
问题2 :在点击处理程序中使用$(this).val()
或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');