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")
});