我在使用jquery上的replaceWith上放置onclick事件时遇到了问题。我在第二次onclick事件上的功能无效。这是我的示例代码。
sample.html
<div id = "first_div" onClick = "replace()">First</div>
my.js
function replace() {
$('#first_div').replaceWith("<div id = 'sec_div' onclick='flyout('fb')'>Second</div>");
}
当我点击first_div时,它可以正常工作。它显示了2nd_div,但是当我点击第二个div时它没有做任何事情。
function flyout(data){
if (data == "fb") $('#sec_div').replaceWith("<div>Last</div>");
}
答案 0 :(得分:1)
没有绑定到新div的点击事件。
在replaceWith()调用之后添加一个新的监听器,或者使用live()来监听文档级别。
答案 1 :(得分:1)
您的代码不起作用的原因是您没有将函数传递给#sec_div
元素的'onclick'。您将其定义为onclick="flyout('fb');"
,但是弹出功能不会返回任何内容。我更改了下面的代码,以便flyout
返回一个函数,并在其闭包中封装data
的值,以防您想要使用具有data
参数的不同值的同一函数。
另外,我提供了一个解决方案,可以帮助您将HTML与Javascript分开。使用jquery,您可以使用delegate
方法将函数绑定到任何事件来实现此目的。
HTML:
<div id="first_div">First</div>
JS:
$("body").delegate('#first_div', 'click', replace);
$("body").delegate('#sec_div', 'click', flyout("fb"));
// change replace to:
function replace() {
$(this).replaceWith("<div id='sec_div'>Second</div>");
}
// change flyout to:
function flyout(data){
return (function(){
if (data == "fb") {
$(this).replaceWith("<div>Last</div>");
}
});
}
编辑:
根据最新的jquery文档,不推荐使用live
方法,而是使用delegate
。
答案 2 :(得分:1)
您没有在功能替换中正确转义它。在
onclick='flyout('fb')'
部分有三个四个单引号。第二个引号关闭第一个引号,第三个引号开始一个新的字符串。尝试按以下方式转义
element="<div id = 'sec_div' onclick='flyout(\"fb\")'>Second</div>"
$('#first_div').replaceWith(element);