Javascript 为什么回调函数接收未定义的参数值?
我正在尝试使用这个看起来很酷的插件,尽管它需要很多DIY风格,但效果非常好 除此之外,插件的主要方法,Javascript 为什么回调函数接收未定义的参数值?,javascript,jquery,twitter-bootstrap,callback,Javascript,Jquery,Twitter Bootstrap,Callback,我正在尝试使用这个看起来很酷的插件,尽管它需要很多DIY风格,但效果非常好 除此之外,插件的主要方法,$.notify(message,options&settings)为关闭通知弹出窗口(toast)时的OnClose回调提供了一个设置属性,可以是自然关闭,也可以通过单击其disclose图标 插件中的代码调用回调,如下所示: if ($.isFunction(self.settings.onClose)) { self.settings.onClose.call(this.$ele)
$.notify(message,options&settings)
为关闭通知弹出窗口(toast)时的OnClose
回调提供了一个设置属性,可以是自然关闭,也可以通过单击其disclose
图标
插件中的代码调用回调,如下所示:
if ($.isFunction(self.settings.onClose)) {
self.settings.onClose.call(this.$ele);
}
在其close
功能中,当用户解除警报时,或当其延迟时间过去并自动关闭时,调用该功能。当我在传入回调调用之前检查this.$ele
值时,我看到它是一个类似jQuery的对象,表示一个元素的数组,即alert元素正忙于从我的窗口中删除自己。即,包含此元素的数组:
<div data-notify="container" class="col-xs-11 col-sm-4 alert alert-minimalist animated fadeInDown fadeOutUp" role="alert" data-notify-position="top-right" data-closing="true" style="display: inline-block; margin: 0px auto; position: fixed; transition: all 0.5s ease-in-out; z-index: 1031; top: 20px; right: 20px;">
<button type="button" aria-hidden="true" class="close" data-notify="dismiss" style="position: absolute; right: 10px; top: 5px; z-index: 1033;">×</button>
<span data-notify="icon"></span>
<span data-notify="title">
</span> <span data-notify="message">Hey hey hey!</span><a href="#" target="_blank" data-notify="url"></a>
</div>
然而,当调用此
onClose
回调时,其元素
参数值为未定义
。为什么在调用回调和执行回调代码之间此值未定义?插件中的代码:
self.settings.onClose.call(this.$ele);
不将任何参数传递给onClose()
回调。.call()
的第一个参数是应该为回调设置的此
指针。.call()
的任何后续参数都将是回调的实际参数。因为没有,所以您查找的任何内容都将是未定义的
有关更多信息,请参阅
因此,如果要访问与此调用关联的元素,则可以在回调中使用this
$("button").click(function () {
$.notify("Hey hey hey!", {
type: "minimalist",
delay: 50000,
onClose: function() {
console.log(this);
}
});
});
所以您想说的是OP应该在onClose中使用$(this)来获取closed@HieuLe-是的,你是对的-我把它添加到我的答案中-谢谢。@jfriend00谢谢你的教育性回答。直到现在我才真正了解
call
。我修改了插件代码,将两个相同的参数值传递给call
:self.settings.onDismiss.call(this.$ele,this.$ele)
和我的回调函数正好得到我期望的元素。@ProfK-您不需要修改插件。您可以使用this
值而不是callback参数。尝试在onClose中执行console.log($(this))以查看它是否打印出您需要的内容。可能是this
的范围丢失了。我刚刚读了一篇很好的文章,介绍了当您将一个方法指定为arg时回调是如何发生的。
$("button").click(function () {
$.notify("Hey hey hey!", {
type: "minimalist",
delay: 50000,
onClose: function() {
console.log(this);
}
});
});