每次单击.fa铅笔时,您都会再次向.savechange和active添加事件侦听器,使用本地变量(如li_元素),这些变量的作用域是回调函数。这意味着,第二次编辑项目时,将执行两个回调,但第一个回调仍然使用li_元素的前一个值,从而也将新值设置为前一个编辑的元素。
您应该声明所有事件侦听器一次,并将所有需要的变量移动到与
var child
.
这应该管用
$(document).ready(function() {
$('.modal').modal();
var child;
var li_element;
$('body').on('click', '.fa-pencil', function(e) {
var text = $(this).closest("li").clone()
.children()
.remove()
.end()
.text();
child = $(this).closest("li").children();
li_element = $(this).closest('li');
console.log(li_element);
var dataActive = $(this).closest('li').attr('data-act');
var li_icon = li_element.attr('data-icon');
var modal1 = $('#modal1');
var modalBody = modal1.find('.modal-content');
modalBody.find('h4.itemdes').text('');
modalBody.find('.modalBody').html('');
var modalHeader = modalBody.find('h4.itemdes').attr('contenteditable', true).text(text);
dataActive = $(this).closest('li').attr('data-act') == 'Y' ? 'checked="checked"' : '';
ActiveOpt = '<p><label><input type="checkbox" id="active" class="filled-in" ' + dataActive + ' /><span>Active</span></label></p>';
IconOpt = '<p><a href="#" class="btn" data-toggle="popover" id="changeIcon"><i class="' + li_icon + '" id="icon_element" aria-hidden="true"></i></a></p>';
var datahtml = ActiveOpt + IconOpt;
modalBody.find('.modalBody').html(datahtml);
});
$('body').on('click', '.saveChange', function() {
var textarea = $('.itemdes').text();
var appendItem = textarea;
li_element.text('').empty().append(appendItem).append(child);
ActiveOpt = '';
IconOpt = '';
});
$('body').on('change', '#active', function() {
li_element.removeAttr('data-act');
if ($(this).prop('checked')) {
li_element.attr('data-act', 'Y');
} else {
li_element.attr('data-act', 'N');
}
})
})