【问题标题】:jQuery double event fire after post/get发布/获取后jQuery双重事件触发
【发布时间】:2010-07-14 15:33:38
【问题描述】:
好吧,我已经绞尽脑汁想弄清楚为什么在 IE 和最新版本的 FF 中会发生这种情况。它适用于铬。我只是一个新手开发人员,最近开始使用 jquery。所以我什至不知道我是否正确地解决了这个问题。
它是大部分的基本形式。 jquery ajax post() 然后 get() 来更新页面。从 get 加载页面后,右侧导航/侧边栏可折叠标题会双重触发,操作窗格中的操作链接也是如此。我尝试使用 bind()、live() 和 delegate() 绑定 click 事件。它最初与 bind 一起工作,但我不得不在 ajax 调用之后重新绑定我的所有点击事件,我正试图找到一种解决方法。
我已经在此处设置了我正在构建的应用的静态版本:
http://ishiftdelete.com/pw_mkvi/ajax_wtf.htm
测试:单击右侧导航/侧边栏中操作页面内的编辑页面链接。这将打开一个带有表单和提交按钮的模型对话框。
【问题讨论】:
标签:
jquery
ajax
post
get
event-delegation
【解决方案1】:
好的,所以我的一个朋友想通了。显然脚本被加载了两次。
不好:
$.get(gurl, function (data) {
var $response = $('<div />').html(data);
$('#mydiv').html($response.find('#mydiv').html()); //form
});
好:
$.get(gurl, function (data) {
var $response = $(data);
$('#mydiv').html($response.find('#mydiv').html()); //form
});
【解决方案2】:
我知道你已经解决了这个问题,但是对于未来的发现者,你可以像这样在你的 <div> 周围添加一个包装器:
<div id="myDivParent">
<div id="myDiv"></div>
</div>
然后您可以使用.load() 和您要查找的元素来简化您的情况,如下所示:
$("#myDivParent").load(gurl + " #myDiv");
就是这样,如果您将参数传递为url selector,它将仅从响应中获取该元素:)