关于将javascript事件与innerHTML DOM元素绑定的问题
现在,关于如何将javascript事件绑定到InnerHTMLDOM元素,我面临着一个严重的问题。我有一个div,该div中有一个输入复选框,一些javascript事件已经绑定到该复选框。我有另一个div和一些文本写在那里。现在,通过javascript,我需要创建一个div,新创建的div的内容将是其他两个现有div的内容,当它被复制并放置到新创建的div时,javscript事件对于复选框来说将是完整的 除了一件事之外,我已经成功地完成了所有这些。当我使用innerHTML将复选框从上一个div放置到新创建的div时,它的放置没有绑定javascript事件 我的HTML结构如下:关于将javascript事件与innerHTML DOM元素绑定的问题,javascript,jquery,html,css,dom,Javascript,Jquery,Html,Css,Dom,现在,关于如何将javascript事件绑定到InnerHTMLDOM元素,我面临着一个严重的问题。我有一个div,该div中有一个输入复选框,一些javascript事件已经绑定到该复选框。我有另一个div和一些文本写在那里。现在,通过javascript,我需要创建一个div,新创建的div的内容将是其他两个现有div的内容,当它被复制并放置到新创建的div时,javscript事件对于复选框来说将是完整的 除了一件事之外,我已经成功地完成了所有这些。当我使用innerHTML将复选框从上一
<div id="text_holder">
"Lubricant"
<input type="checkbox" id="Lubricantc" class="check_class">
</div>
<div id="text_holder2">
SKF,FAG
</div>
我做了很多研究来解决这个问题。但是没有正常工作。
请帮我解决这个问题。提前感谢
我的完整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);
});
函数removepersist(事件)
{
console.log(“在removepersist中”);
var pa=$(event.target).closest(“div”).prop(“id”);
var pa_数据=$(event.target).closest(“div”).prop(“id”);
var祖父母=$('#'+pa).parent().prop(“id”);
var internal_data=document.getElementById(pa).innerHTML;
如果(祖父母=='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\u class”;
check.onclick=function()
{
检查工作(ig_id、事件);
}
document.getElementById('text_holder').appendChild(检查);
var holder2_unused=internal_data.substr(0,internal_data.indexOf(':');
var holder2_实际=内部数据。替换(holder2_未使用“”);
document.getElementById(“text\u holder2”).innerHTML=holder2\u实际值;
$(“#persist:input”).attr(“disabled”,true);
var unused_part=internal_data.substring(internal_data.lastIndexOf(“试试这个。在这里,我用一个按钮替换了复选框,该按钮响应单击。您可以简单地用复选框替换它
函数checkFunc(){
var previous_ig_content=document.getElementById(“文本持有者”).innerHTML;
var previous_brand_content=document.getElementById(“text_holder2”).innerHTML;
var childDiv=document.createElement('div');
childDiv.id=“newDiv”;
childDiv.onclick=alertMess;
childDiv.style.backgroundColor=“红色”;
childDiv.style.cursor=“pointer”childDiv.innerHTML=previous\u ig\u content+previous\u brand\u content;
document.getElementsByTagName('body')[0].appendChild(childDiv);
}
函数alertMess(){
警报(“哦!您单击了生成的div”);
}
“润滑剂”
点击我
SKF,FAG
在那里使用本机javascript您可以使用innerHTML
或-但它们只克隆内联侦听器,而不克隆使用addEventListener的侦听器
-请参见下面的演示:
//复选框侦听器
document.querySelectorAll('input[type=checkbox]')[0]。addEventListener('click',function()){
控制台日志(“单击”);
});
//克隆和附加
document.body.appendChild(document.querySelectorAll('.wrapper')[0].cloneNode(true));
//内联侦听器
函数内联(){
控制台日志(“内联”);
}
.wrapper{
填充:10px;
边框:1px纯红;
显示:内联块;
垂直对齐:中间对齐;
}
是/否
你知道.innerHTML
会覆盖分配给它的所有内容,对吗?是的,但这是一个覆盖的问题吗?我不知道。如果不覆盖,那么如何解决我的问题。什么是ig_id
?它没有定义,加上子类div
需要在创建后的某个时候附加到DOM中。你能添加ful吗l javascriptcode@Abhradip如果您返回,请确保您提供了一个。这应该不是问题,因为您已经让它基本正常工作了,不要忘记包括正在消失的事件,因为我现在没有看到。我使用了复选框,事实上复选框也是由javascript和e事件当时是绑定的。我认为这是造成问题的原因。DOM上实际上没有该复选框。它是由一些javascript创建的。好吧。但您可以在生成它的位置向它添加一个单击事件。就像我们在本例中在生成的div上附加一个onclick事件一样:childDiv.onclick=“newFunction()"
我将编辑我的答案并将其显示给您。现在给我五个查看它。当您单击生成的div时,我在其上附加了一个单击事件。如果这解决了您的问题,请您接受并向上投票我的答案。您已经写了一行作为childDiv.onclick=alertMess;它工作正常。现在,如果我需要向alertMess f发送一些参数那么如何编写它呢?它应该是像childDiv.onclick=alertMess(x,y)或其他任何东西吗
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);
});