【问题标题】:GWT Programmatically Click FileUploadGWT 以编程方式单击 FileUpload
【发布时间】:2015-03-17 04:07:56
【问题描述】:

首先,我的开发环境是 Chrome/Safari,带有 Eclipse Luna 和 OSX Yosemite 上的 Super Dev Mode。

我对这个小部件有点时间。我创建了许多扩展基本上传小部件的上传小部件(图像、音频、视频等)。图像上传在初始化时调用 FileUpload.click() ,这在显示的文件对话框中按预期工作。但是,对于音频和视频上传,我需要用户从 SuggestBox 中选择一个选项,然后一旦做出选择,应该触发 FileUpload.click() (我已经有适当的事件处理程序等)。最后一点不起作用,或者似乎没有,因为我没有显示文件对话框。我已经跟踪了 SuperDevMode 中的代码执行,并且 FileUpload.click() 确实似乎被触发了(执行移过这一点并且没有引发错误/异常),但我不能,因为我的一生都无法获得要显示的对话框。 FileUpload 元素没有隐藏/禁用(它曾经是“屏幕外”,但我更改了它以确保这不是问题)。

可能是什么原因造成的 - 可能是操作系统/浏览器问题,而不是 GWT 问题?

更新

我决定向 FileUpload 小部件添加一个 ClickHandler,该小部件在触发时会简单地写入控制台。通过这两种机制,上传小部件被“点击”,所以我真的不知道下一步该去哪里。有趣的是,如果我从音频上传中删除 SuggestBox 并仅调用 click 函数,我确实会收到弹出窗口,但我不明白为什么这会干扰点击(如果存在)。


已解决

解决了。因此,似乎只有当触发它的事件是 ClickEvent 时,尝试以编程方式触发 FileUpload 点击当前才有效。为了解决这个问题,我必须创建自己的原生点击事件,并在用户从 SuggestBox 中进行选择时触发该事件。这是预期的行为吗?

【问题讨论】:

    标签: java gwt


    【解决方案1】:

    您可以像this一样触发文件上传的点击:

    FileUpload f = new FileUpload(); 
    f.getElement().<InputElement>cast().click();
    

    为了让它在基于 WebKit 的浏览器(Chrome、Safari)中工作,FileUpload 必须“移出视图”但不能隐藏(如 setVisible(false),它将 CSS 显示属性设置为无),即类似于(在 CSS 中):位置:绝对;顶部:-1000 像素;左:-1000px;

    【讨论】:

    • 您好,感谢您抽出宝贵时间回复。我已经尝试了我能想到的一切(包括上述内容),但我无法让它发挥作用。如果我触发点击上传我的小部件的初始化,那么它就可以工作。但是,尝试在某些用户事件(在我的情况下为 SearchBox 选择事件)之后触发单击会导致不显示文件对话框。我不明白为什么它以第一种方式起作用,但不是第二种。正如我所说,我已经使用 SDM 跟踪了代码,并且一切都按我的预期调用/执行。
    猜你喜欢
    • 2015-04-11
    • 2021-09-30
    • 1970-01-01
    • 2013-10-09
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2017-06-17
    相关资源
    最近更新 更多