Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery函数在JS innerHTML属性之后不工作_Javascript_Jquery_Innerhtml_Craftyjs - Fatal编程技术网

Javascript jQuery函数在JS innerHTML属性之后不工作

Javascript jQuery函数在JS innerHTML属性之后不工作,javascript,jquery,innerhtml,craftyjs,Javascript,Jquery,Innerhtml,Craftyjs,我在我的应用程序中使用此代码: document.getElementById("inventory_box").innerHTML = "<img src='./img/rock.gif' id='test' />"; 试试这个 $(document).on('click',"#test",function() { alert('test'); }); 读一读试试这个 $(document).on('click',"#test",function() { ale

我在我的应用程序中使用此代码:

document.getElementById("inventory_box").innerHTML = "<img src='./img/rock.gif' id='test' />";
试试这个

$(document).on('click',"#test",function() {
    alert('test');
});
读一读

试试这个

$(document).on('click',"#test",function() {
    alert('test');
});

读取

由于图像是动态添加的,因此需要使用来注册事件处理程序

// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#inventory_box').on('click', '#test', function() {
      // Run this
});
这将把您的事件附加到
#inventory_box
元素中的
测试
图像元素,
减少必须检查整个
文档的范围
元素树并提高效率。

由于图像是动态添加的,因此需要使用来注册事件处理程序

// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#inventory_box').on('click', '#test', function() {
      // Run this
});
这将把您的事件附加到
#inventory_box
元素中的
测试
图像元素,
减少必须检查整个
文档的范围
元素树并提高效率。

事件处理程序的分配在元素具有此类id之前运行,因此在创建元素后,它将不会被分配任何事件处理程序

正如所建议的,解决此常见javascript错误的最简单方法是,您可以将事件分配给容器DOM元素,并使用jquery的事件委派在事件新添加的DOM元素上触发事件

但我宁愿不使用这种方法,我不能给你的理由,说,我只是简单地不喜欢

始终在创建元素后分配事件。例如:

document.getElementById("inventory_box").innerHTML = "<img src='./img/rock.gif' id='test' />";

您对事件处理程序的分配在存在具有此类id的元素之前运行,因此在您创建元素之后,将不会为其分配任何事件处理程序

正如所建议的,解决此常见javascript错误的最简单方法是,您可以将事件分配给容器DOM元素,并使用jquery的事件委派在事件新添加的DOM元素上触发事件

但我宁愿不使用这种方法,我不能给你的理由,说,我只是简单地不喜欢

始终在创建元素后分配事件。例如:

document.getElementById("inventory_box").innerHTML = "<img src='./img/rock.gif' id='test' />";

考虑使用“append”而不是innerHTML。混合使用普通JavaScript和jQuery似乎会导致使用新元素更新DOM时出现一些延迟。 下面的代码适用于我

$("#inventory_box").append("<img src='./img/rock.gif' id='test' />")

$('#test').click(function(d){console.log("clicked!");});
$(“#库存箱”)。追加(“”)
$('#test')。单击(函数(d){console.log(“clicked!”;});

考虑使用“append”而不是innerHTML。混合使用普通JavaScript和jQuery似乎会导致使用新元素更新DOM时出现一些延迟。 下面的代码适用于我

$("#inventory_box").append("<img src='./img/rock.gif' id='test' />")

$('#test').click(function(d){console.log("clicked!");});
$(“#库存箱”)。追加(“”)
$('#test')。单击(函数(d){console.log(“clicked!”;});

如果您使用最新版本的jquery,请尝试。如果您使用最新版本的jquery,请尝试。谢谢,但这似乎不起作用。Rohan的一个似乎适合我…使用Rohan的一个会降低性能吗?是的,如果您没有最近的父选择器(已经存在于DOM中),您将不得不使用
文档
元素。唯一的问题是,代码将检查整个文档元素树,以查找添加的新图像,这需要一些时间!谢谢,但这似乎不起作用。Rohan的一个似乎适合我…使用Rohan的一个会降低性能吗?是的,如果您没有最近的父选择器(已经存在于DOM中),您将不得不使用
文档
元素。唯一的问题是,代码将检查整个文档元素树,以查找添加的新图像,这需要一些时间!