在元素添加到DOM之前,将事件注册到元素中
To register an event to an element before element is added to DOM?
元素#create_butt_1
在被单击时不会执行任何操作。只有在将事件注册到元素之前调用setTimeout
时,这才有效。为什么会发生这种情况?将事件注册到元素的另一种方法是什么?
content = "<div class='no_content_div' id='brief_cal_no_cont_div'><p>There is no events</p><p class='create_butt create_new_task' id='create_butt_1'>create</p><div>";
$('#create_butt_1').click(function(event){
event.stopPropagation();
var $addEventDialog = $('#add_event_dialog');
showCenterDialog($addEventDialog);
});
$div.append(content);
您正试图在页面上找到#create_button
,但从您的代码中还没有附加它。尝试在片段中创建html,然后搜索其中的元素,然后可以将其附加到页面:
content = $("<div class='no_content_div' id='brief_cal_no_cont_div'><p>There is no events</p><p class='create_butt create_new_task' id='create_butt_1'>create</p><div>");
$('#create_butt_1', content).click(function(event){
event.stopPropagation();
var $addEventDialog = $('#add_event_dialog');
showCenterDialog($addEventDialog);
});
$div.append(content);
下面是一个小提琴的例子:http://jsfiddle.net/mx3csebd/
您必须将它添加到DOM中,然后才能为事件侦听器注册它。在没有看到其余代码的情况下,我假设$div
是对页面上div
的引用,并且您正在使用jQuery向其附加HTML
如果是这种情况,您必须在将事件附加到div
(从而将其添加到DOM)之后注册事件,如下所示:
content = "<div class='no_content_div' id='brief_cal_no_cont_div'><p>There is no events</p><p class='create_butt create_new_task' id='create_butt_1'>create</p><div>";
$div.append(content);
$('#create_butt_1').click(function(event){
event.stopPropagation();
var $addEventDialog = $('#add_event_dialog');
showCenterDialog($addEventDialog);
});
var $div = $("div");
var content = "<div class='no_content_div' id='brief_cal_no_cont_div'><p>There is no events</p><p class='create_butt create_new_task' id='create_butt_1'>create</p><div>";
$div.append(content);
$('#create_butt_1').click(function (event) {
event.stopPropagation();
var $addEventDialog = $('#add_event_dialog');
showCenterDialog($addEventDialog);
});
function showCenterDialog(eventDialog){
alert(JSON.stringify(eventDialog));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div></div>
另一种(在我看来也是更好的)方法是创建实际的HTML元素并注册事件,而不是使用HTML字符串:
var contentDiv = document.createElement("div");
contentDiv.setAttribute("class", "no_content_div");
contentDiv.setAttribute("id", "brief_cal_no_cont_div");
var par1 = document.createElement("p");
par1.innerText = "There is no events";
var par2 = document.createElement("p");
par2.setAttribute("class", "create_butt create_new_task");
par2.setAttribute("id", "create_butt_1");
par2.innerText = "create";
par2.onclick = function (event) {
event.stopPropagation();
var $addEventDialog = $('#add_event_dialog');
showCenterDialog($addEventDialog);
};
contentDiv.appendChild(par1);
contentDiv.appendChild(par2);
var $div = $("div");
var contentDiv = document.createElement("div");
contentDiv.setAttribute("class", "no_content_div");
contentDiv.setAttribute("id", "brief_cal_no_cont_div");
var par1 = document.createElement("p");
par1.innerText = "There is no events";
var par2 = document.createElement("p");
par2.setAttribute("class", "create_butt create_new_task");
par2.setAttribute("id", "create_butt_1");
par2.innerText = "create";
par2.onclick = function (event) {
event.stopPropagation();
var $addEventDialog = $('#add_event_dialog');
showCenterDialog($addEventDialog);
};
contentDiv.appendChild(par1);
contentDiv.appendChild(par2);
$div.append(contentDiv);
function showCenterDialog(eventDialog){
alert(JSON.stringify(eventDialog));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div></div>
使用jQuery函数(如"delegate"或"on")将事件绑定到元素,而不管元素是否存在于DOM中。以下是的示例
$( "body" ).on( "click", "#create_butt_1", function() {
// Do something...
});
相关文章:
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 没有为Ajax添加的新元素注册Jquery事件
- 如何在Ajax调用的元素上注册mouserover
- JQuery没有't在“t”上注册事件;刷新”;元素
- 在元素添加到DOM之前,将事件注册到元素中
- JavaScript一次性在多个元素上注册一个事件类型
- html元素是'由于父级的z索引为负,t注册js点击
- 注册单击列表项子元素
- 为什么我们必须注册一个自定义元素
- 聚合物元素注册和生命周期(创建和准备调用两次)
- 我有错误文档.注册元素未被细化
- 在重叠元素上注册鼠标事件
- 如何使用 Angular 注册现有元素
- 如何使用 JQuery 在 HTML 中注册动态创建元素的事件
- 从尚未注册到 DOM 的 jquery 对象中删除元素
- 如何使用传递给该模板的数据在车把模板中的元素上注册事件
- 聚合物在我的自定义函数之后注册所有元素
- 如何为DOM元素注册事件处理程序
- 在聚合物元素注册之前访问元素属性
- 如何使鼠标事件将 TR 元素注册为目标