Javascript 如果单击了第二个元素,jQuery each()是否不继续执行第一个元素的代码?

Javascript 如果单击了第二个元素,jQuery each()是否不继续执行第一个元素的代码?,javascript,jquery,Javascript,Jquery,抱歉,如果标题不够清楚,我有元素具有相同的类,当用户单击每个元素时,jquery代码应该单独为每个元素运行,问题是,当单击第一个元素时,在它完成整个代码的运行之前,如果我单击第二个元素,它会使第一个元素不完整,并在第二个元素上运行代码,它应该同时工作(顺便说一句,它应该将数据发送到一个php文件,即使我点击了很多元素,它也可以正常工作,因为类不工作) 代码如下: jQuery(function($) { $('.anchor-tag-class').each(functi

抱歉,如果标题不够清楚,我有
元素具有相同的类,当用户单击每个元素时,jquery代码应该单独为每个元素运行,问题是,当单击第一个元素时,在它完成整个代码的运行之前,如果我单击第二个元素,它会使第一个元素不完整,并在第二个元素上运行代码,它应该同时工作(顺便说一句,它应该将数据发送到一个php文件,即使我点击了很多元素,它也可以正常工作,因为类不工作)

代码如下:

    jQuery(function($) {
        $('.anchor-tag-class').each(function() {
            $(this).click(function() {
                $this = $(this);
                var id = $this.attr('data-id');
                if ( $this.hasClass('on') ) {
                    $this.removeClass('on');
                    $this.addClass('loading');
                    $.post("process.php", { element_id: id, status: 'off' }, function(data) { $this.addClass('off').removeClass('loading'); } );
                } else {
                    $this.removeClass('off');
                    $this.addClass('loading');
                    $.post("process.php", { element_id: id, status: 'on' }, function(data) { $this.addClass('on').removeClass('loading'); } );
                }
            });
        });
    });
那么我做错了什么


提前感谢。

在这种情况下,您不需要
each()
,因为代码将只针对引发事件的特定元素运行。您还可以将函数挂起
$this
变量

试试这个:

$('.anchor-tag-class').click(function() {
    var $this = $(this);
    var id = $this.attr('data-id');
    if ( $this.hasClass('on') ) {
        $this.removeClass('on').addClass('loading');
        $.post("process.php", { element_id: id, status: 'off' }, function(data) { $this.addClass('off').removeClass('loading'); } );
    } 
    else {
        $this.removeClass('off').addClass('loading');
        $.post("process.php", { element_id: id, status: 'on' }, function(data) { $this.addClass('on').removeClass('loading'); } );
    }
});

您有一个$this变量,设置为$(this)…此$this的定义在哪里?如果它不在函数的范围内,那是您的问题!

注意,我在
$this
声明之前添加了
var
,以确保它仍然在
$范围内。post
回调。我没有使用控制台,感谢您清理代码。此功能与我一样工作正常但是当单击另一个元素并且第一个打开时仍然存在加载类的问题,$.post()中的函数(data){$this.addClass('off').removeClass('loading');}将不会为该元素运行当我在$this之前添加var时,它现在可以工作了,非常感谢:)