我有这段代码用于将tr
元素从模态中克隆/复制到页面。
$(function () {
$('#toggleCheckbox').on('click', function () {
var $toggle = $(this).is(':checked');
$("input:checkbox").attr('checked', $toggle);
$('#btnAplicarNorma').prop('disabled', !$toggle);
});
$('#resultadoNormaBody').on('change', 'input[type=checkbox]', function () {
var $my_checkbox = $(this);
var $my_tr = $my_checkbox.closest('tr');
if ($my_checkbox.prop('checked')) {
$my_tr.addClass('copyMe');
}
var $all_checkboxes = $my_checkbox.closest('tbody').find('input[type=checkbox]');
$all_checkboxes.each(function () {
if ($(this).prop('checked')) {
$('#btnAplicarNorma').prop('disabled', false);
return false;
}
$('#btnAplicarNorma').prop('disabled', true);
});
});
$('button#btnAplicarNorma').on('click', function (ev) {
var $tr_to_append = $('#resultadoNormaBody').find('tr.copyMe');
$('#tablaNorma').removeAttr('style');
$('#alertSinNorma').hide();
if ($tr_to_append.length) {
$tr_to_append.find('input[type=checkbox]').prop('checked', false);
$tr_to_append.clone().appendTo('#normaBody').removeClass('copyMe');
$tr_to_append.removeClass('copyMe');
$(this).prop('disabled', true);
}
});
});
但是我遇到了一些问题:
tr
即使所有标记都被标记也不会克隆任何复选框clone/copy
相同tr
?tr
副本是如何完全复制模态中的副本的,而我想先取消选中该复选框,这有可能吗?这是一个小玩弄,有什么建议吗?
主要问题在于,当您以编程方式将其设置为选中状态时,表内的复选框并未真正正确触发。为确保正确触发所有关联的事件,您应该改为触发.click()事件:
$("#resultadoNormaBody").find("input:checkbox").click();
为确保您不会出现重复的克隆,最简单的方法是不一次克隆所有行,而是遍历它们,并将html与已添加的html进行比较,如下所示:
//fetch all the rows that have already been cloned
var clonedRows = $("#normaBody").find("tr");
//iterate thru all the rows that have been checked
$.each($tr_to_append, function (i, v) {
var added = false;
//fetch their html (for easier compare)
var currentRowHtml = $(v).html();
//now compare against the rows that have already been cloned
$.each(clonedRows, function (i, cRow) {
var clonedRowHtml = $(cRow).html();
if (currentRowHtml == clonedRowHtml) {
added = true;
}
});
//if the row hasn't been added yet- go ahead and clone it now
if (!added) {
$(v).clone().appendTo('#normaBody').removeClass('copyMe');
}
});
这是更新的小提琴的链接:http : //jsfiddle.net/wq51zL9x/4/
这是有关比较表行的更多信息:比较两个表行,如果匹配则删除
这是使用.click()需要复选框更改事件以编程方式完成的对已检查状态的更改的更详尽的解答
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句