0

嗨,我有这个 jQuery 代码:

$('#myid').click(function() {   

    var data = {
            action: 'xxx_ajax_response',
            xxx_ajax_response_nonce: the_ajax_script.xxx_ajax_response_nonce    
        };      
    //do an ajax request

    $.post(the_ajax_script.ajaxurl, data, function(response) {

        $(this).next().slideToggle();   

    });

    //return false;
});

当 AJAX 功能仍在执行/加载时如何暂时禁用点击事件?但是在成功加载 AJAX 后恢复点击?我尝试过更改课程,但我正在使用 id 选择器并且不起作用。有没有简单的方法?谢谢你。

4

2 回答 2

1

click只需在回调函数之外设置一个标志变量:

var _doing_ajax = false;
$('#myid').click(function() {   
    if ( _doing_ajax ) {
        return false;
    }
    var data = {
            action: 'xxx_ajax_response',
            xxx_ajax_response_nonce: the_ajax_script.xxx_ajax_response_nonce    
        };      

    _doing_ajax = true;
    //do an ajax request
    $.post(the_ajax_script.ajaxurl, data, function(response) {

        $(this).next().slideToggle();   
        _doing_ajax = false;
    });

    //return false;
});

基本上你定义了一个新的局部变量,默认值设置为false. 在.click()回调函数的开头,检查标志变量的值——如果为真,则返回假。就在开始 AJAX 请求之前,您将变量设置为true. 完成 AJAX 调用后,false再次将变量设置为,以便进一步单击将再次启用 AJAX。

于 2012-12-04T10:18:08.197 回答
0

您可以使用 jQuery unbind在加载时从元素中删除事件,并在加载数据后再次绑定它。您在jQuery.post()中编写bind函数success$.post()

这篇文章可能有助于在 jQuery 中删除事件处理程序的最佳方法?

于 2012-12-04T10:46:17.917 回答