Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $在快速连续单击时会覆盖此内容_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript $在快速连续单击时会覆盖此内容

Javascript $在快速连续单击时会覆盖此内容,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一系列带有锚的div标记,单击这些标记时,会向下滑动一个用AJAX填充的面板。代码如下所示: $('.details').click(function(e) { $this = $(this).parents('.container'); var id = $this.data('id'); $(this).slideToggle('slow', function() {

我有一系列带有锚的
div
标记,单击这些标记时,会向下滑动一个用AJAX填充的面板。代码如下所示:

        $('.details').click(function(e) {

            $this = $(this).parents('.container');
            var id = $this.data('id');

            $(this).slideToggle('slow', function() {
                if ($(this).is(":visible")) {
                    $.ajax({ 
                        type: 'POST', 
                        url: '/method', 
                        data: { id: id }, 
                        timeout: 5000
                    }).done(function(result){

                        console.log('Done was fired.');
                        console.log($this);

                        // This is my headache:
                        // Using $this here to do some stuff

                    }).fail(function(jqXHR, textStatus, errorThrown){
                        console.log('Fail was fired.');
                        console.log(jqXHR, textStatus, errorThrown);
                    });

如果我快速单击两个链接,第一个开始,然后在它完成之前,第二个开始,覆盖这一行:
$this=$(this).parents('.container'),这最终给人的印象是ajax永远不会结束。如何确保我有权访问正确的
$this
?我应该继续查询DOM,还是使用某种变量,变量名?

,因为它是一个全局变量

    $('.details').click(function(e) {

        $this = $(this).parents('.container');
    ^^^    
   No var
添加
var
,使其具有本地作用域,并且不会被覆盖

    $('.details').click(function(e) {

        var $this = $(this).parents('.container');
        ^^^    

因为它是一个全局变量

    $('.details').click(function(e) {

        $this = $(this).parents('.container');
    ^^^    
   No var
添加
var
,使其具有本地作用域,并且不会被覆盖

    $('.details').click(function(e) {

        var $this = $(this).parents('.container');
        ^^^    

$this
设置为函数中的局部变量,而不是页面中的全局变量:

var $this = $(this).parents('.container');

通过在函数中局部声明变量,每个函数调用都会获得自己的变量。当AJAX调用的回调函数使用该变量时,它使用回调函数闭包中捕获的局部变量,而不是全局变量。

使
$this
成为函数中的局部变量,而不是页面中的全局变量:

var $this = $(this).parents('.container');

通过在函数中局部声明变量,每个函数调用都会获得自己的变量。当AJAX调用的回调函数使用变量时,它使用回调函数闭包中捕获的局部变量,而不是全局变量。

您引用的
$this
在全局范围内。只需在声明中以
var
作为前缀您在
$this
前面缺少一个
var
,这导致它成为一个全局变量。不可原谅。谢谢,伙计们。为了避免在开发中出现这种情况,请添加
“使用strict”到JS文件的顶级范围,它会抱怨意外使用globals:)太棒了,谢谢Anthony,我没有意识到这一点!您引用的
$this
在全局范围内。只需在声明中以
var
作为前缀您在
$this
前面缺少一个
var
,这导致它成为一个全局变量。不可原谅。谢谢,伙计们。为了避免在开发中出现这种情况,请添加
“使用strict”到JS文件的顶级范围,它会抱怨意外使用globals:)太棒了,谢谢Anthony,我没有意识到这一点!