我有一个AJAX函数的小问题:
- PAGE A代表页面。
- PAGE X表示加载的内容。
- RES A代表页面结果。
- RES B代表一些AJAX加载的内容=>新结果。
PAGE A包含20个结果,每个结果都可以被删除,并通过AJAX (PAGE X)加载一个新的结果。
的例子:
用户在A页:PAGE A加载js的"click"函数。->结果为RES A(20倍)。
当用户从RES a (1x)中删除一个结果时,AJAX加载一个新的结果RES B (1x):
用户仍然在页A上。--> PAGE X加载了js的"click"函数。->结果为RES B (1x)
为了将点击功能添加到RES B,我必须重新加载较轻的JS,但它会增加RES a的功能。
所以当用户从RES A中删除结果时(删除5个结果的1x5), RES B的结果乘以5x(用户得到5倍相同的结果而不是1x)。
你明白吗?简而言之,AJAX请求乘以x RES B,而不是坚持一个请求。你知道我怎样才能保留我的reb1x吗?
谢谢!
我认为你每次重新绑定点击事件,而"重新加载一个更轻的JS"。Javascript并没有替换事件函数——它们只是被连接起来了。如果你使用jQuery使用live添加点击事件。如果没有,在重新加载
事件似乎被附加了多次。
使用unbind().click()
或unbind().bind('click')
或die().live()
,无论你使用什么
您的解释确实难以理解,但如果我理解正确,您的问题在于您多次绑定相同的元素。
在你的情况下,最好的解决方案是使用jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */})
,它允许绑定所有的选择器匹配元素一次(在这种情况下,例如,如果你有一个表id=datatable,它里面的每一个链接将始终绑定到该处理程序,即使你添加更多的html表,或删除一些),你不必担心它以后。
但是,如果您不使用jQuery,唯一的解决方案是在添加事件之前取消绑定(删除已经存在的绑定),然后再绑定它们。
您需要做的是在加载结果时处理结果(1x)。一种简单的方法是在加载结果时添加一个类,然后在加载完成后删除它。
。
$('.newresult .clickbutton').ready(function(){
// Do something
});
$('.newresult').removeClass('newresult');