2

我正在我的网络应用程序中安装 Dropbox 选择器 ( https://www.dropbox.com/developers/chooser ),示例代码是:

<input type="dropbox-chooser" name="selected-file" id="db-chooser"/>
<script type="text/javascript">
    document.getElementById("db-chooser").addEventListener("DbxChooserSuccess",
        function(e) {
            alert("Here's the chosen file: " + e.files[0].link)
        }, false);
</script>

但是,我宁愿使用 jQuery,所以我正在尝试:

$("#db-chooser").on('DbxChooserSuccess',function(event) { 
                alert("Here's the chosen file: " + event.files[0].link)
}

警报确实会触发,但事件不包含 files[] 节点。我做了一个console.log,找不到数据。有不同的方法可以做到这一点吗?

4

2 回答 2

2

当我刚接触这个 API 时,我曾经遇到过类似的问题。我当时找到了一个链接,这帮助我了解了很多关于这方面的事情。这是链接。

该链接所说的是,要访问event.files[0],您必须签入event.originalEvent,而不是event。因此,您的代码将如下所示:

$("#db-chooser").on('DbxChooserSuccess',function(event) { 
  alert("Here's the chosen file: " + event.originalEvent.files[0].link)
}

实际发生的是,当一个事件被初始化时,jQuery 复制了originalEvent(JS 事件)的几乎所有属性,并使用自定义属性创建了自己的event包装器。与它一起,它将 存储为属性,以便以后可以访问originalEvent一些遗漏的属性(例如在您的情况下)。从 jQuery 网站files[0]

jQuery 的事件系统根据 W3C 标准规范化事件对象。事件对象保证被传递给事件处理程序。原始事件的大多数属性都被复制并规范化到新的事件对象。

这就是为什么files[0]jQuery 的事件中不存在您的属性的原因。希望这可以帮助。

PS:该链接中有很多好东西。一定要检查一下:)

于 2013-07-04T16:57:04.203 回答
0

正如大卫弗雷戈利建议的那样,尝试e.originalEvent.files[0].link

http://api.jquery.com/on/#event-handler

于 2013-07-04T16:56:33.083 回答