Tôi đã tạo biểu mẫu 'vô hạn' đơn giản với các trường nhập. Mỗi khi một đầu vào trống được lấy nét, nó sẽ tạo ra một đầu vào mới và làm mờ một trường nhập trống, trường sẽ bị xóa.Sự kiện jQuery blur được kích hoạt hai lần trong Chrome
Xem example here
tôi sử dụng đoạn mã sau để làm cho nó tất cả xảy ra:
var $input = $('<div/>').html($('<input/>').addClass('value'));
$('form').append($input.clone());
$('form').on('focus', 'input.value', function(e) {
// Add new input if the focused one is empty
if(!$.trim(this.value).length) {
$('form').append($input.clone());
}
}).on('blur', 'input.value', function(e) {
var $this = $(this);
if(!$.trim(this.value).length) {
console.log('REMOVING INPUT');
$this.parent().remove();
} else {
$this.attr('name', 'item-'+$this.val());
}
});
Vấn đề là tuy nhiên, trong Chrome sự kiện blur
là bắn hai lần khi tôi chuyển sang ứng dụng khác (⌘tab). Điều này gây ra lỗi, vì không thể xóa nút vì nó đã biến mất:
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
Firefox có vẻ hoạt động tốt.
Vậy tại sao sự kiện blur
được kích hoạt hai lần và làm cách nào để ngăn điều đó xảy ra?
EDIT - Đã thử câu trả lời trong this question, nhưng không có may mắn. Vẫn nhận được thông báo lỗi trong Chrome, tôi đang làm gì sai?
Có cách nào để kiểm tra xem phần tử đó có tồn tại không? Vì lần thứ hai blur
kích hoạt nút bị xóa. $(this).length
vẫn là khác 0.
trùng lặp của http://stackoverflow.com/questions/9649966/chrome-maybe-safari-fires-blur-twice-on-input-fields-when-browser-loses-foc –
vâng tôi biết điều này trông quen thuộc: -) – Pointy
Cảm ơn, tôi ngu ngốc, đã tìm kiếm jQuery: (Thử ngay bây giờ – floorish