Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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_Twitter Bootstrap_Callback - Fatal编程技术网

Javascript 为什么回调函数接收未定义的参数值?

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)

我正在尝试使用这个看起来很酷的插件,尽管它需要很多DIY风格,但效果非常好

除此之外,插件的主要方法,
$.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);
        }
    });
});