Javascript JQuery$(此)在函数参数内不工作

Javascript JQuery$(此)在函数参数内不工作,javascript,jquery,Javascript,Jquery,以下代码不起作用: $(".countdown").circularCountdown({ startDate:$(this).attr('data-start'), endDate:$(this).attr('data-end'), timeZone:$(this).attr("timezone") }); 下面的那个很好用 $(".countdown").circularCountdown({ startDate:$(".countdown").att

以下代码不起作用:

$(".countdown").circularCountdown({

    startDate:$(this).attr('data-start'),
    endDate:$(this).attr('data-end'),
    timeZone:$(this).attr("timezone")

});
下面的那个很好用

$(".countdown").circularCountdown({

    startDate:$(".countdown").attr('data-start'),
    endDate:$(".countdown").attr('data-end'),
    timeZone:$(".countdown").attr("timezone")

});

我不明白,$(this)引用了“.countdown”,因为我调用了这个元素的函数?有人能帮我一下吗?

因为
这个
不涉及
倒计时
所以一个解决方案是使用
每个()


$(this)通常绑定到被单击、悬停等的元素。我认为在使用$(this)选择器之前,必须指定或选择具有“data start”属性的元素。您能否提供有关如何运行此函数和html结构的更多信息?

您不是在调用函数,而是在调用插件。所以你写的json参数不知道对象是什么。我非常同意阿伦·P·约翰尼的观点,这是一种方式。如果你想深入,你可以在插件中更改这些值

 startDate: $(this).attr('data-start'),
 endDate: $(this).attr('data-end'),
 timeZone: $(this).attr("timezone")

它将起作用:)

在对象初始化器中,“this”是指当前正在执行的函数的执行上下文,即调用circularCountdown的函数,或者(我认为这很可能是这种情况)如果调用不在函数内,则默认情况下是全局上下文

您可以这样解决您的问题:

 $(".countdown").each(function() {

       var start = $(this).attr('data-start'),
              end = $(this).attr('data-end'),
              time = $(this).attr("timezone");

       $(this).circularCountdown({
            startDate: start,
            endDate: end,
            timeZone: time
      });

 });
jQuery的each方法允许您传入一个函数,依次初始化每个元素,通过“this”访问当前正在初始化的元素。

您正在(几乎)同时执行
$(“.countown”)
$(this)
。因此,
这个
指向您调用
$(“.countown”)

视觉示例

var currentThis = this;
$(".countdown").circularCountdown({

    startDate:$(this).attr('data-start'), // "this" is the same as "currentThis"
    endDate:$(this).attr('data-end'),
    timeZone:$(this).attr("timezone")

});
您可能正在考虑传递回调的jQuery函数。在这种情况下,jQuery在回调中设置
this
,以指向调用函数的对象。就像

另一种解决方案是将其保存到变量中,您不希望运行同一查询四次

var ctDown = $(".countdown");
ctDown.circularCountdown({    
    startDate: ctDown.attr('data-start'),
    endDate: ctDown.attr('data-end'),
    timeZone: ctDown.attr("timezone")

});

$(此项)不引用$('.countdown')。它指的是周围封闭的“this”。阅读“closure”和“scope”来找出原因:-)看到一个低代表性的用户提出了一个很好的问题,这让人耳目一新。我会按照编辑您的版本的方式编写代码。($this而不是$(this))。但是,声明您需要使用每个是不正确的。啊,是的,我的坏,还没有刷新:-)好的呼叫!原因很明显:
var$this=$(this)$this.circ….
我认为这个答案中缺少的一点是,
this
只会被设置为OP在调用需要回调的jQuery方法时所期望的值,因为jQuery设置了
this
。这正是你所做的。这种方法的一个问题是,实际上不需要每次都这样做,您自己多次调用
circularCountown
,而不是让jQuery对象为您这样做。如果类“countdown”中有多个元素,这将不起作用。在没有看到circularCountdown插件的代码的情况下,jQuery的each方法(不是$.each,它是一个“静态”函数,用途稍有不同)对我来说似乎是最好的方法。@Bengrifiths确实如此。除了根据OP的示例,页面上只有一个属性(因为他们使用的是
$(this).attr('data-start')
,它将只获取第一个属性)。但你的观点是正确的。
var ctDown = $(".countdown");
ctDown.circularCountdown({    
    startDate: ctDown.attr('data-start'),
    endDate: ctDown.attr('data-end'),
    timeZone: ctDown.attr("timezone")

});