[英]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.