我有一个功能可以删除我的表单中的字段,该字段适用于Firefox但不适用于Chrome。
function activeDelete(del) {
$('[data-delete="' + del + '"]').click(function(event) {
deleteField(event);
});
}
function deleteField(event) {
if ((members - 1) >= 3) {
members -= 1;
var i = $(event.target).data('delete');
console.log(i)
var currentdiv = $('[data-div="' + i + '"]');
currentdiv.remove();
$("#rollWheel").val("Roll the wheel ! (" + members + " members)");
} else {
$('.errors').remove();
$('#firstCard').append('<div class="errors animated fadeOut">3 participants minimum.</div>');
}
}
activeDelete(1);
我记录了我的i
变量,它是undefined
(在Chrome中)。我在本地测试,也在我的网站上测试过。
我在这里失踪了什么?
答案 0 :(得分:4)
您应该在此使用currentTarget
而不是target
,但我建议您使用$(this)
。
$(event.currentTarget).data('delete');
function activeDelete(del) {
$('[data-delete="' + del + '"]').click(function(event) {
deleteField($(this)); // see here the parameter
event.preventDefault();
});
}
function deleteField(obj) {
if ((members - 1) >= 3) {
members -= 1;
var i = obj.data('delete'); // see here the getter
console.log(i)
var currentdiv = $('[data-div="' + i + '"]');
currentdiv.remove();
$("#rollWheel").val("Roll the wheel ! (" + members + " members)");
} else {
$('.errors').remove();
$('#firstCard').append('<div class="errors animated fadeOut">3 participants minimum.</div>');
}
}
activeDelete(1);
答案 1 :(得分:2)
将以下行从$(event.target)
更改为$(event.currentTarget)
。这是因为click事件可能已触发子元素。
根据doc:
在事件遍历时标识事件的当前目标 DOM。它总是引用事件处理程序的元素 附加到而不是event.target,它标识元素 事件发生了。
或者您也可以将自己的行改为$(event.target).closest("[data-delete]")
。