[英]Bind function with parameters to dynamically created element of dynamically added event
[英]Bind function on Runtime for dynamically created html element
我必须使用ajax调用动态创建具有特定类的<ul>
html元素,例如class_c
。
class_c
由第三方js文件使用,由于它是匿名的(例如$('.class_c').click(function(e){})
),因此无法更改或手动调用,因此我无法使用jQuery进行绑定.bind()
。
有没有一种方法可以使用class_c
重建所有元素的class_c
,以便新元素可以响应此匿名函数?
如果使用on()而不是click(),则可以将click句柄绑定到选择器的所有子元素,即使这些元素将来会创建。 当然,然后您需要一个用于那些“将要创建的元素”的容器,该容器已经在dom中,否则处理程序仍然无法使用...
$('.myContainer').on("click", ".class_c", function(e){});
如果您是说要解雇他们的处理程序,则为它们添加新元素后,他们就不会钩住该事件,那么除了骇入jQuery内部,我唯一能想到的就是克隆他们已经钩住的元素之一。事件开启。
jQuery的clone
方法接受一个参数,该参数告诉它复制事件和数据以及节点。 因此,在添加新元素时,您可以执行以下操作:
var clone = $(".class_c").first().clone(true);
clone.html(/*...your content here...*/);
clone.appendTo(/*...some appropriate target...*/);
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
<ul class="class_c">
<li>Original - click me!</li>
</ul>
<script>
(function() {
"use strict";
// "Other" code hooks click on .class_c elements by *cloning* one of
// the ones that already has the click event hooked, using the `true`
// argument that tells jQuery to clone event handlers and data
$(".class_c").click(function() {
display("Handler triggered for '" + $(this).text() + "'");
});
// Your code adds a new .class_c element
var clone = $(".class_c").first().clone(true);
clone.html("<li>Clone - click me!</li>");
clone.appendTo(document.body);
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.