【发布时间】:2016-12-24 05:17:15
【问题描述】:
现在我面临一个关于如何将 javascript 事件绑定到 innerHTML DOM 元素的严重问题。我有一个 div,并且该 div 中有一个输入复选框,并且一些 javascript 事件已经绑定到该复选框。我有另一个 div,那里写了一些文字。现在通过javascript我需要创建一个div,新创建的div的内容将是其他两个现有div的内容,并且当复选框被复制并放置到新创建的div时,javscript事件将保持不变。
我已经成功地完成了所有这些,除了一件事。当我使用 innerHTML 将复选框从前一个 div 放置到新创建的 div 时,它的放置没有绑定 javascript 事件。
我的HTML结构如下:
<div id="text_holder">
"Lubricant"
<input type="checkbox" id="Lubricantc" class="check_class">
</div>
<div id="text_holder2">
SKF,FAG
</div>
text_holder 和 text_holder2 是我现有的两个 div。
现在用于创建另一个 div 并从这两个先前的 div 复制数据并将其放置在新 div 中的 javascript 代码是:
var previous_ig_content=document.getElementById("text_holder");
var previous_brand_content=document.getElementById("text_holder2");
var child_div=document.createElement('div');
child_div.id=ig_id+"div";
child_div.innerHTML=previous_ig_content.innerHTML+previous_brand_content.innerHTML;
我已经做了很多研究来解决这个问题。但没有正常工作。 请帮我解决这个问题。先谢谢了!!!
我的完整javascript如下:-
function removepersist(event)
{
console.log("in removepersist");
var pa=$(event.target).closest("div").prop("id");
var pa_data=$(event.target).closest("div").prop("id");
var grandparent=$('#'+pa).parent().prop("id");
var inner_data=document.getElementById(pa).innerHTML;
if (grandparent=='persist')
{
document.getElementById('text_holder').innerHTML=pa_data.replace('div','')+" ";
var ig_id=event.target.id.slice(0,-1);
var check=document.createElement('input');
check.type='checkbox';
check.id=event.target.id;
check.className="check_class";
check.onclick=function()
{
checkwork(ig_id,event);
}
document.getElementById('text_holder').appendChild(check);
var holder2_unused=inner_data.substr(0, inner_data.indexOf(':'));
var holder2_actual=inner_data.replace(holder2_unused,'');
document.getElementById("text_holder2").innerHTML=holder2_actual;
$("#persist :input").attr("disabled", true);
var unused_part=inner_data.substring(inner_data.lastIndexOf("<"),inner_data.lastIndexOf(":")+1);
var reqd_data=inner_data.split(unused_part);
var item_group_name=reqd_data[0];
var brands_names=reqd_data[1].split(',')
for (i=0;i<brands_names.length;i++)
{
if(brands_names[i].includes("(AD)"))
{
new_brand_name=brands_names[i].replace('(AD)','')
$(".brand_tag[value="+new_brand_name+"]").attr("checked", true);
$(".dealer_tag[value="+new_brand_name+"]").attr("checked", true);
}
else
{
new_brand_name=brands_names[i]
console.log("- - - - -");
console.log(""+brands_names[i]+"jigsaw");
//$(".brand_tag[value="+new_brand_name+"]").prop("checked", true);
//$("input[name=brand_id[]][value="+new_brand_name+"]").attr('checked', 'checked');
console.log("++++++");
}
}
}
var to_be_removed=document.getElementById(pa);
to_be_removed.parentNode.removeChild(to_be_removed);
}
function checkwork(ig_id,event)
{
console.log("in checkwork for : "+ig_id+" and "+event.target.id);
var previous_ig_content=document.getElementById("text_holder");
var previous_brand_content=document.getElementById("text_holder2");
var child_div=document.createElement('div');
child_div.id=ig_id+"div";
child_div.innerHTML=previous_ig_content.innerHTML+previous_brand_content.innerHTML;
document.getElementById('persist').appendChild(child_div);
$("#persist :input").attr("disabled", false);
$("#persist :input").attr("checked", true);
$('.itemgroup_tag').prop('checked',false);
$('.brand_tag').prop('checked',false);
$('.dealer_tag').prop('checked',false);
document.getElementById('text_holder').innerHTML="";
document.getElementById('text_holder2').innerHTML="";
}
$('.check_class').click(function() { //This is for the existing checkbox in persist
console.log("by existing check");
removepersist(event);
});
$(".itemgroup_tag").click(function() {
document.getElementById('text_holder').innerHTML=$(this).prop('value')+" ";
var ig_id=$(this).prop('value');
var check=document.createElement('input');
check.type='checkbox';
check.id=$(this).prop('value')+"c";
check.className="check_class";
check.onclick=function () { //this part is for appending the content of text_holder and text_holder2 to persist
checkwork(ig_id,event);
}
document.getElementById('text_holder').appendChild(check);
});
【问题讨论】:
-
您知道
.innerHTML会覆盖分配给它的所有内容,对吧? -
是的,但这是覆盖问题吗?我不知道。如果没有,那么如何解决我的问题。
-
ig_id是什么?它没有定义,加上child_div需要在创建后的某个时间附加到 DOM。 -
你能添加完整的javascript代码吗
-
@Abhradip 当您返回时,请确保您提供 minimal reproducible example 。这不应该是一个问题,因为你已经让它大部分工作并且不要忘记包括那个正在消失的事件,因为我现在没有看到一个。
标签: javascript jquery html css dom