即使被删除,jquery live也会记住旧的HTML

时间:2011-11-17 12:00:28

标签: live jquery

因为我使用ajax我使用'live'

为图像上传按钮编写了脚本
$('.image_upload').live('click',function()

这会打开一些对话框,你可以上传图片等等。一切正常。

现在问题出现了,如果我在我的网站上按回家,那么新数据将被放入图像上传按钮所在的div中。我看到主屏幕。现在我可以再次进入图像上传页面并查看它。现在再次点击回家,所以图像上传按钮所在的div将填充代表主屏幕的新数据。现在让我们返回并按下图像上传按钮。而你知道什么?按钮按实时脚本将执行3次。就像在同一个地方有3个按钮。就像旧的数据仍然存在于div中。我该如何解决这个问题?

是否有任何类型的命令可以强制jquery忘记旧数据?

更多细节。

我的ajax看起来像这样......

<div>some header with menu buttons'HOME' , 'ADD image'</div>
<div>HERE is content</div>

现在如果你在内容div中按回家,你只能看到家庭数据。 如果您按添加图像,请参阅add_image按钮+脚本$('.image_upload').live('click',function()也会加载到内容div中。

现在如果你再次按回家,再次只有家庭数据将被加载到内容div中,这意味着可能删除旧数据。

但如果您使用home /添加图像按钮几次,然后按内容div内的上传图像按钮。脚本多次动作。好像脚本在那里被写了几次,或者按钮在那里被渲染了好几次。

更新

我已经发现问题在于使用image_upload按钮本身加载到div中的脚本。

如果我把脚本放在静态页脚的某个地方,这是不受影响的并且是静态的,那么在内容div中只有html正在改变,那么一切正常。

问题是为什么如果将脚本放在内容div中,脚本不会被删除?因为如果用新的数据更改div的html,那么必须用旧的html删除它,对吗?

1 个答案:

答案 0 :(得分:2)

使用.live在文档而不是元素上注册事件。因此,即使元素被替换,事件仍然存在,每次运行代码时,都会注册另一个事件。

您可以使用.die删除事件,或者如您找到的那样,确保只绑定一次直播事件。

$('.image_upload').die('click'); // Will remove click events registered with live