Jquery事件不适用于动态添加的潜水
Jquery Events Not Working For Dynamically Added Divs
我有一个非常烦人的问题。我有一个名为#log-out
的按钮,当你点击它时,它会将一定数量的数据保存在名为importantOSdata
的localStorage变量中。
当页面加载时,它会检查变量!= null
是否为,如果不是,则会从页面中删除保存在localstorage变量中的div,并将其替换为保存在localStoragevariable中的div。问题是,正如标题所说,jquery事件不会在动态div上工作,即使它们在没有保存数据的情况下已经工作了,而且只是纯硬编码的html。我尝试过使用.on(),但正如您在代码中看到的,我使用了this
关键字,将无法正常工作。我必须使用this
关键字。
(1) 我的代码中有一个div的点击事件,并检查它是否有某种类型的数据标记(数据标题)和一个普通的旧src标记。然后将其传递到一个函数中,该函数从src标记中创建一个带有src的弹出iframe。(1) 过去工作的代码:
$(".icon").each(function() {
var iconFile = $(this).attr("data-iconFile");
var title = $(this).attr("data-title");
var file = $(this).attr("src");
$(this).css("backgroundImage", "url(" + iconFile + ")");
$(this).dblclick(function() {
new createFrame(file,title);
addItem($(this).attr("class"),iconFile);
//canSlideUp = false;
});
});
我尝试过的新代码:
$(".icon").each(function() {
var iconFile = $(this).attr("data-iconFile");
var title = $(this).attr("data-title");
var file = $(this).attr("src");
$(this).css("backgroundImage", "url(" + iconFile + ")");
$(this).on("dblclick",function() {
new createFrame(file,title);
addItem($(this).attr("class"),iconFile);
//canSlideUp = false;
});
});
});
保存/加载代码:
$(document).ready(function() {
$("#log-out").click(function() {
alert("Your Progress was saved:"+localStorage.getItem("inportantOSdata"));
localStorage.setItem("inportantOSdata",document.getElementById("data-holder").innerHTML);
});
});
window.onload = function (){
if(localStorage.getItem("inportantOSdata") != null) {
$("#data").remove();
alert("data exists");
$("#data-holder").html(localStorage.getItem("inportantOSdata"));
}
}
//localStorage.clear();
你们可以看到我是如何使用这个关键字的。有这个有趣的问题吗?提前感谢!
记住,您可以将click
事件绑定到动态添加元素的容器。
假设容器是#container
。
您可以使用将事件绑定到其子级
$("#container").on('click', ".xyz" ,function(){
// good to go.
// $(this). gives you the handle to each element individually.
});
工作原理:-即使在执行此脚本时subject element
不存在,它仍然可以正常工作。因为
当您在特定元素上绑定.click()
事件时,jQuery
将检查所有匹配的元素,并在第一次执行时绑定该事件,但如果稍后添加了该元素,则没有事件绑定到它。
但是,当您将事件绑定到容器并将其范围限制为特定的.class
或#id
时,每次容器注册单击时,jQuery
都会检查容器中的相应元素(在我们的情况下为.xyz
),并且该事件是相对于容器而非元素本身触发的,所以CCD_ 15的存在在脚本执行时并不重要。
注意:-虽然此技术很方便,但必须小心将事件绑定到最近的父容器,因为一旦调用此方法,就必须遍历DOM才能找到所有匹配的元素。一旦提供了足够复杂的DOM,或者动态添加的元素数量达到了相当大的数量(受客户端处理能力的限制),这可能会带来性能隐患。所以像$(document).on('click', #xyz ,function(){});
这样的东西是一个严格的无编号
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在函数中添加数组元素的数值
- 如何将歌曲添加到jPlayer
- 显示5秒后隐藏潜水
- 在html Select中添加搜索
- Jquery事件不适用于动态添加的潜水
- 我如何添加时间延迟到我的潜水,使他们出现一个接一个像幻灯片一样
- 停止骨干从添加周围潜水到一个视图
- 在Angular指令的HTML视图中添加子潜水
- 使用数据-同位素添加沟值并设置潜水高度