关于克隆/复制TR的一些问题
Some questions around clone/copy TR
我有这段代码用于将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
,即使所有复选框都已标记 - 如何避免两次使用相同的
tr
来clone/copy
- 是否可以在克隆之前修改复选框?如果你看一下这个例子,你会注意到克隆
tr
是如何与模态上的复制完全一样的,并且我想先取消选中复选框,这是可能的吗
这是一把小提琴,有什么建议吗?
主要问题是,当您以编程方式将表中的复选框设置为选中时,它们并没有真正被正确触发。为了确保所有相关的事件都被正确触发,你应该触发一个.click()事件:
$("#resultadoNormaBody").find("input:checkbox").click();
为了确保不会出现重复的克隆,最简单的方法是不要在一批中克隆所有行,而是迭代它们,并将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()的更详细的答案需要复选框更改事件来响应以编程方式完成的选中状态的更改
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- Javascript/JQuery删除代码中的父TR问题
- DataTables-FixedHeader-多个tr in the ad对齐问题
- 使用js:order<创建表时出现问题;tr>并且<td>
- jquery隐藏/显示表/tr问题
- 关于克隆/复制TR的一些问题
- 在IE8中动态添加tr和td设计问题
- 装载时出现问题<tr>文本转换为数组的元素
- AngularJs的Table和3000+ tr的性能问题