2

我对 AJAX 函数有一点问题:

  1. PAGE A 代表页面。
  2. PAGE X 代表加载的内容。
  3. RES A 代表页面结果。
  4. RES B 代表一些 AJAX 加载的内容 => 新结果。

PAGE A 包含 20 个结果,每个结果都可以删除,并通过 AJAX (PAGE X) 加载新结果。

例子:

用户在 PAGE A:-> PAGE A 加载 js“点击”功能。--> 结果为 RES A (20x)。

当用户从 RES A (1x) 中删除一个结果时,AJAX 会加载一个新的结果 RES B (1x):

用户仍然在 PAGE A 上。 --> PAGE X 加载了 js“点击”功能。--> 结果是 RES B (1x)

为了给 RES B 添加点击功能,我必须重新加载一个更轻的 JS,但它会增加 RES A 的功能。

因此,当用户从 RES A 中删除结果时(删除 5 个结果为 1x5),RES B 结果乘以 5x(用户得到 5x 相同的结果而不是 1x)。

你明白吗?简而言之,AJAX 请求乘以 x RES B 而不是坚持 1 个请求。你知道我怎样才能保持我的 RES B 1x 吗?

谢谢!

4

4 回答 4

2

我认为您每次“重新加载更轻的 JS”时都会重新绑定单击事件。Javascript 不会取代事件函数——它们只是串联起来的。如果你使用 jQuery 使用live添加点击事件。如果你不 - 在重新加载之前清除当前的点击事件

于 2011-07-18T09:26:03.827 回答
1

似乎事件被多次附加。
使用unbind().click()or unbind().bind('click'),或者die().live() 你正在使用的任何东西

于 2011-07-18T09:25:05.773 回答
1

你的解释真的很难理解,但如果我理解正确,你的问题在于你多次绑定同一个元素。

在您的情况下,最好的解决方案是使用 jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */}),它允许绑定所有选择器匹配元素一次(在这种情况下,例如,如果您有一个 id=datatable 的表,则其中的每个链接将始终绑定到该处理程序,即使您向表中添加更多 html 或删除一些),您以后也不必担心它。

但是,如果您不使用 jQuery,唯一的解决方案是在添加事件之前取消绑定事件(以删除已经存在的绑定),然后再次绑定它们。

于 2011-07-18T09:32:35.497 回答
0

您需要做的是在加载结果时处理结果 (1x)。一种简单的方法是在加载时将一个类添加到结果中,并在完成后将其删除。

例如

$('.newresult .clickbutton').ready(function(){
   // Do something
});

$('.newresult').removeClass('newresult');
于 2011-07-18T09:29:46.187 回答