【问题标题】:How to delete and reload jQuery / javascript functions after ajax callajax调用后如何删除和重新加载jQuery / javascript函数
【发布时间】:2011-12-15 07:46:15
【问题描述】:

假设我有这个代码:

<div id="content">
</div>

我使用一个简单的 ajax 请求来填充内容,当我点击某个按钮时这些数据会起作用

    $.get("page?num=" + pageNumber, function(data){
                $("div#content").html(data);
});

数据将有一次

<div id="Data1">
</div>

其他时候

<div id="Data2">
</div>

对于每个 id,我都有不同的 jquery 函数。例如:

$('#Data1').click(function(){});

有些功能相似,有些不同。

我的问题 - 如果我点击按钮,我会加载我需要的所有脚本。当我单击另一个按钮时,我需要为新内容再次加载脚本,但是与以前的内容相关的旧功能会发生什么情况?每次单击时我都会加载新脚本而不删除最后一个。

如何正确删除/管理我的脚本?

谢谢, 阿隆

【问题讨论】:

  • 你能告诉我们你在哪里打电话吗:$('#Data1').click(function(){});并且大概是 $('#Data2').click(function(){});
  • 当我想到它时 - 我的所有脚本对于每次加载都是相同的。我想知道在我的情况下如何解决它,如果我有不同的脚本,我将如何解决它......

标签: javascript jquery html ajax get


【解决方案1】:

我不确定我是否理解你的问题。你期待像

$("div#content").html(""); // deleting existing data
$("div#content").html(new_data); //loading new data

【讨论】:

  • 不 - 我期待 $("div#content").html(somedata);或 $("div#content").html(someOtherdata);
  • 是的..那么上面的就行了。第一行将删除所有现有数据。第二行将加载新数据
【解决方案2】:

jQuery 将事件绑定到 DOM 对象 (divs) 在这种情况下,当它们被调用时。这意味着它会查找具有给定 ID 的元素,然后绑定它。由于脚本运行时Edit1和Edit2不存在,所以没有绑定。

您可以在每次更改他们的 ID 时尝试绑定他们。

function rebind() {
    $('#content').click(function(){});
    $('#Data1').click(function(){});
    $('#Data2').click(function(){});
}

每当您在 div 中加载新内容时调用它。

【讨论】:

  • 我无法使用 live,因为我绑定到 jQuery 1.4.3。无论如何,使用 rebind() 和不使用它有什么区别 - 无论哪种方式,如果它没有找到它不附加函数的元素。bind() 和 rebind() 之间有什么区别?跨度>
  • @Alon:你没有检查文档对吗?它说它自 1.3 版以来一直存在。我认为如果你使用的是 1.4.3 版本,你应该会很好。
  • 我误解了他们的意思 - 感谢您的通知!
【解决方案3】:

Gurung 对事件处理程序的看法是正确的,但从 jQuery 1.7 开始,.live() 方法已被弃用。改为使用 .on() 附加事件处理程序。

(我无法将此信息作为评论发布,所以它必须是一个新的答案,抱歉)。

【讨论】:

    【解决方案4】:

    可能应该只使用.live() 函数。

    描述:为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2021-07-20
      • 2012-03-22
      • 2013-06-03
      相关资源
      最近更新 更多