jQuery的replaceWith只工作一次

标签 jquery replacewith

我正在尝试用另一个元素替换一个元素。它只能工作一次,然后当我尝试再次单击元素 .two 时,它不会调用该函数。

这是代码,它包裹在 django for 循环中。这就是为什么我需要使用 $(this):

<div class = "galery">

{% for image in images %}

<img class = 'one' src = "http://www.fmscout.com/datas/avatars/48327-chelsea-logo.jpg">
<span class='glyphicon glyphicon-certificate two'></span>

{% endfor %}

</div>

<script>
$('.two').on('click', change_content);

function change_content(){
    var one = $('.galery').find('.one')
    $(this).replaceWith("<img class = 'one' src ='http://www.fmscout.com/datas/avatars/48327-chelsea-logo.jpg'>")
    one.replaceWith("<span class='glyphicon glyphicon-certificate two'></span>")
}

</script>

最佳答案

这是因为新的 .two 是动态添加的,但在新的 .two div 存在之前,点击处理程序已经附加到现有的 .two div 上。您需要将处理程序附加到始终存在的元素,然后使用它来处理对子元素的点击。这称为事件委托(delegate)。在 jQuery 中,它会像这样完成:

$('.galery').on('click', '.two', change_content);

因此,.galery 响应对其及其子项的所有点击,并且如果点击目标与 on() 调用中的选择器匹配 (.galery)两个),它将调用处理函数。

关于jQuery的replaceWith只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141333/

相关文章:

javascript - 如何将动态创建的变量传递给 JavaScript 的 addEventListener

javascript - jQuery - 通过 Id 获取动态 (*) 元素并放入数组

javascript - ReplaceWith 不会删除注释

python - 将特定值中的值替换为相应的值

javascript - 无法操作从 jQuery 中的 ajax 请求插入的数据

javascript - Jquery 函数不适用于两种或多种形式

javascript - 在 ASP.Net MVC 中使用 ajax 通过 Id 检查单选按钮

javascript - replaceWith() 而 JQuery 中的元素 fadeOut() 和 fadeIn()

javascript - Vanilla JavaScript 替换元素

jquery - 使用 jQuery ajax 响应 html 更新 div