我对AJAX功能有点问题:
PAGE A包含20个结果,每个结果都可以删除,并通过AJAX(第X页)加载新结果。
示例:
用户在PAGE A上: - > PAGE A加载js“单击”功能。 - >结果是RES A(20x)。
当用户从RES A(1x)中删除结果时,AJAX会加载一个新结果RES B(1x):
用户在-Atill-页面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而不是坚持1个请求。你有什么线索我可以保留我的RES B 1x吗?谢谢!
答案 0 :(得分:2)
我认为你每次重新绑定点击事件“重装轻量级JS”。 Javascript不会替换事件函数 - 它们只是连接在一起。如果您使用jQuery,请使用live添加click事件。如果您不这样做 - 在重新加载之前清除当前的点击事件
答案 1 :(得分:1)
似乎多次附加事件。
使用unbind().click()
或unbind().bind('click')
或die().live()
您正在使用的
答案 2 :(得分:1)
您的解释真的难以理解,但如果我理解正确您的问题在于您多次绑定相同的元素。
在你的情况下,最好的解决方案是使用jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */})
,它允许绑定所有选择器匹配元素一次(在这种情况下,例如,如果你有一个id = datatable的表,每个链接都是在它内部将始终绑定到该处理程序,即使您向表中添加更多html,或删除一些),您也不必在以后担心它。
但是,如果您不使用jQuery,唯一的解决方案是在添加事件之前取消绑定事件(删除已存在的绑定)然后再绑定它们。
答案 3 :(得分:0)
您需要做的是在加载结果时处理结果(1x)。一个简单的方法是在加载时将一个类添加到结果中,并在完成后将其删除。
e.g。
$('.newresult .clickbutton').ready(function(){
// Do something
});
$('.newresult').removeClass('newresult');