递归添加点击事件处理程序
Adding click event handlers recursively
我有一个元素#standardBox
#standardBox.click --> replaces itself with #newBox
#newBox.click --> replaces itself with #standardBox
但是这个最新的 #standardBox
没有点击事件侦听器。我希望它有一个点击事件侦听器及其随后创建的元素。这进入了一个递归循环,我不知道如何解决。
我将此用于 header 标准内容,它被替换为 intermediate/new 内容,这又是为了恢复标准内容 ...
谢谢。
HTML
<div id="container">
<div id="standardBox"></div>
</div>
CSS
html, body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
position: relative;
height: 5em;
width: 5em;
background: #C5CAE9;
}
#standardBox {
position: absolute;
top: 20%;
right: 20%;
bottom: 20%;
left: 20%;
background: #ffffff;
cursor: pointer;
}
#newBox {
height: 3em;
width: 3em;
background: #000000;
cursor: pointer;
}
JAVASCRIPT
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$('#standardBox').click(function(){
$('#container').html('<div id="newBox"></div>');
// register event handler for new element created
$('#newBox').click(function(){
$('#container').html('<div id="standardBox"></div>');
// but this #standardBox has no click event listener
});
});
像这样将处理程序附加到主体:
$("body").on("click", "#standardBox", function(){
$('#container').html('<div id="newBox"></div>');
})
.on("click", "#newBox", function(){
$('#container').html('<div id="standardBox"></div>');
});
这会导致主体侦听来自 #standardBox
和 #newBox
的事件。请注意,this
变量仍设置为 #standardBox
或 #newBox
元素。
使用下面的代码。动态创建的元素不会使用 'click' 函数触发事件。您需要将处理程序附加到文档(正文)
$(document).on('click','#standardBox',function(){
$('#container').html('<div id="newBox"></div>');
// register event handler for new element created
});
$(document).on('click','#newBox',function(){
$('#container').html('<div id="standardBox"></div>');
// but this #standardBox has no click event listener
});
你为什么要写这么复杂的代码来做这件事。因为可以有一个非常简单的代码。
假设这是你的 html。
<div id="container">
<div id="standardBox"></div>
</div>
现在,要更换内胆。
$(function(){
$('#container div').click(function(){
$(this).attr("id")=="standardBox"?$(this).attr("id","newBox"):$(this).attr("id","standardBox");
});
});
我有一个元素#standardBox
#standardBox.click --> replaces itself with #newBox
#newBox.click --> replaces itself with #standardBox
但是这个最新的 #standardBox
没有点击事件侦听器。我希望它有一个点击事件侦听器及其随后创建的元素。这进入了一个递归循环,我不知道如何解决。
我将此用于 header 标准内容,它被替换为 intermediate/new 内容,这又是为了恢复标准内容 ...
谢谢。
HTML
<div id="container">
<div id="standardBox"></div>
</div>
CSS
html, body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
position: relative;
height: 5em;
width: 5em;
background: #C5CAE9;
}
#standardBox {
position: absolute;
top: 20%;
right: 20%;
bottom: 20%;
left: 20%;
background: #ffffff;
cursor: pointer;
}
#newBox {
height: 3em;
width: 3em;
background: #000000;
cursor: pointer;
}
JAVASCRIPT
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$('#standardBox').click(function(){
$('#container').html('<div id="newBox"></div>');
// register event handler for new element created
$('#newBox').click(function(){
$('#container').html('<div id="standardBox"></div>');
// but this #standardBox has no click event listener
});
});
像这样将处理程序附加到主体:
$("body").on("click", "#standardBox", function(){
$('#container').html('<div id="newBox"></div>');
})
.on("click", "#newBox", function(){
$('#container').html('<div id="standardBox"></div>');
});
这会导致主体侦听来自 #standardBox
和 #newBox
的事件。请注意,this
变量仍设置为 #standardBox
或 #newBox
元素。
使用下面的代码。动态创建的元素不会使用 'click' 函数触发事件。您需要将处理程序附加到文档(正文)
$(document).on('click','#standardBox',function(){
$('#container').html('<div id="newBox"></div>');
// register event handler for new element created
});
$(document).on('click','#newBox',function(){
$('#container').html('<div id="standardBox"></div>');
// but this #standardBox has no click event listener
});
你为什么要写这么复杂的代码来做这件事。因为可以有一个非常简单的代码。
假设这是你的 html。
<div id="container">
<div id="standardBox"></div>
</div>
现在,要更换内胆。
$(function(){
$('#container div').click(function(){
$(this).attr("id")=="standardBox"?$(this).attr("id","newBox"):$(this).attr("id","standardBox");
});
});