2012-08-03 79 views
3

我在事件处理程序上使用jQuery one()方法来触发一次,然后取消注册本身。喜欢的东西:重置jQuery one(),以便它会再次触发

$(".main").one('mousedown', '.resizeBar', function (e) { /* my code */ }); 

然后一些Ajax(实际上,一个.net回传)重置页面的最(无需重新加载),我想重新设置事件处理程序。有没有办法重新设置one()事件处理程序再次处于活动状态?手动重新触发它这样是不行的,明明:

$(".main .resizeBar").trigger("mousedown"); 

回答

13

只是包装的代码在功能

function mainMouseDownOne() { 
    $(".main").one('mousedown', '.resizeBar', function (e) { /* my code */ }); 
} 

$(document).ready(function(){ 
    mainMouseDownOne(); 

    .ajax({ 
     ... 
     success: function() { 
      ... 
      mainMouseDownOne(); 
     } 
    }) 
}); 
2

我会建议包裹一个()的函数调用内部方法结合,那么您可以在加载页面时调用该函数(以绑定初始事件处理程序),并在Ajax调用成功时再次调用该函数。

var bindEvents = function(){ 
    $(".main").one('mousedown', '.resizeBar', function (e) { /* my code */ }); 
}; 

$(function(){ bindEvents(); }); // call the one() method on page load. 

$.post(pageURL, function(data){ 
    bindEvents(); // As an example, after some sort of Ajax or post-reset event. 
}); 
+0

显然,在我提交我的报告之前,有人发布了一个非常类似(相同)的回复。对不起,冗余。 – 2012-08-03 17:45:43

+0

不用担心。我会先接受他的,但我很感谢你的回答。我很困惑你为什么把$(function(){bindEvents();});而不仅仅是bindEvents();虽然。 – brentonstrine 2012-08-03 21:42:21

+0

这是因为,在页面加载时,您在调用最初的bindEvents()函数之前等待DOM准备好了......绝对需要在绑定事件之前加载页面(HTML)。 – 2012-08-06 23:01:08