代码应该打印所选div的id但不会。我没有找到错误。谢谢你的帮助。
HTML
<body>
<div id="form_area">
<div>
<button onclick="return add_row();" style="width:100%;">Add Row</button>
</div>
</div>
</body>
的Javascript
$(document).ready(function() {
$('#form_area div').click(function(e) {
console.log($(this).attr('id'));
});
});
function add_row() {
var random_id = Math.floor((Math.random() * 1000) + 1);
$('#form_area').prepend('<div id="' + random_id + '" class="form_row"></div>');
}
答案 0 :(得分:2)
好的,我想我明白你错过了什么。您在使用ID
函数
add_row
.form_row
动态添加到DOM。因此,在执行$('.form_row').click(
时,没有.form_row
来绑定处理程序。以下使用.on
方法的方法将处理程序绑定到#form_area
,并仅在click事件来自.form_row
时执行处理程序
$('#form_area').on('click', '.form_row', function () {
console.log(this.id);
});
$('#form_area div')
选择div div
中没有#form_area
的{{1}}
html中的评论下方显示选择了哪个div,
ID
答案 1 :(得分:0)
要访问id,请使用'on',因为您的div是动态生成的:
$(document).ready(function() {
$('#form_area').on('click', '.form_row', function () {
console.log(this.id);
});
});
答案 2 :(得分:0)
首先,你有jQuery - 你应该使用它来注册你的事件处理程序,而不是使用过时的,容易出错的内联事件处理程序。
其次,您的按钮处理程序位于#formarea
内,因此也触发了单击处理程序,因为按钮的父级没有ID。这可能是不可取的。
第三,您的事件处理程序需要委派,因为您试图捕获动态添加元素的事件。
因此,请删除onclick
属性并添加:
$('#formarea button').on('click', addRow);
$('#formarea').on('click', '.form_row', function() { // delegated, for dynamic rows
console.log(this.id); // NB: not $(this).attr('id') !!
});
function addRow(ev) {
// unmodified
}
答案 3 :(得分:0)
尝试console.log($('#form_area div').attr('id'));