【问题标题】:Jquery Draggable/Sortable and programmatically clicking on an input[file]Jquery Draggable/Sortable并以编程方式单击输入[文件]
【发布时间】:2015-04-21 17:16:46
【问题描述】:

我在使用 JQuery Draggable 和 Sortable 插件时遇到了一个奇怪的错误。

我有一个可以添加到可排序容器中的可拖动对象列表。

页面的功能是能够将内容(可拖动)添加到页面(可排序)并能够在之后对其进行排序。 我可以添加多种类型的内容,例如文本、图形、表格和文件(例如图像)...

当他将图像对象放入可排序容器中时,我希望用户从他的计算机中选择一个文件进行上传。因此,我在放置结束时模拟了输入文件上的“单击”(因为可拖动和可排序已连接,这发生在可排序的“更新”事件中)。 但我不知道为什么,输入文件的点击事件确实被触发了(我检查了console.log())但是“选择文件”窗口从未打开。

如果我在萤火虫控制台中输入我的$('#upl input').click();,它会起作用...如果我在第三个链接中触发点击事件,它会起作用。但是当“点击”在可排序容器的更新事件中时,窗口就不会出现。我什至尝试使用 setTimeOut 延迟单击以等待更新事件结束,但是仍然触发了单击事件但没有窗口...

有人遇到过这个问题吗?

这是我在 jsfiddle 上的问题的简化。 https://jsfiddle.net/jp51cadt/3/ 您可以将“图像”放到正方形中。它会触发对下方输入的点击,但不会显示上传窗口。

function updateSortable(event, $ui) {
     $('#upl input').on("click", function() {
         alert("this works");
     });
     $('#upl input').click(); // not this
 } 

我添加警报以显示点击被触发...

【问题讨论】:

  • 一些代码 sn-p(s) 会很有用。 “不起作用”很难在不查看代码哪里出错的情况下进行调试。
  • 是的,我知道,这会很难,因为代码真的很复杂,而且还有很多其他你不需要知道的东西,但我正在研究一个更简单的错误版本无论如何这都会对我有所帮助...与此同时,我发布了这个...一个永远不知道的人,也许有人已经遇到过这个问题。
  • 一个好的开始是“点击”发生的代码,以及周围的“更新事件”。 :)
  • 谢谢,我更新了原帖。

标签: jquery jquery-ui jquery-ui-sortable jquery-ui-draggable jquery-events


【解决方案1】:

基本上,这在浏览器和版本之间的工作方式不同,因为以编程方式单击输入文件被认为存在安全风险。

有些浏览器允许,有些限制,有些则不允许。在大多数情况下,如果 输入文件 没有隐藏,并且导致点击的事件来自 用户操作上下文(即用户驱动),那么它似乎是允许。

在您的示例中,点击不是用户驱动的 - 因此 Chrome 不允许它。但是如果你把它改成用户驱动的事件,比如mouseup,它就会起作用。

您必须找出最适合您的情况的方法。我updated your fiddle 有一个工作click() 的简单示例,但它可能会更明确一点。

【讨论】:

  • 谢谢,我想我可以通过容器上的 mouseup 事件解决一些问题,没想到这一点。如果有人需要这样做,这是一个小提琴:@ 987654322@ 但我并没有真正得到你对用户驱动操作的解释......我模拟点击输入文件没有任何问题,它只是在上下文中jquery-sortable 的更新事件,它不起作用...
  • 我所说的“用户驱动”是一个强制用户交互的事件。我没有对此进行过广泛的测试,但是我阅读了很多,并且与我的测试相对应。在我的测试(chrome)中,除非在用户驱动的事件中调用单击,否则单击不会触发,例如 在按键上在单击另一个按钮时等。只需按下@ window.onload 中的 987654325@ 在我的情况下不会触发。很高兴它有帮助!
  • 啊好的,所以 sortable 的更新事件不是“用户驱动的”,是有道理的......那么谢谢你的解释!
  • 有关信息,点击输入文件可以在 sortable 的“停止”事件中触发,因为它是“用户驱动”的排序,而不是“更新”(“更新”在排序时触发是成功的,当你完成排序时触发“停止”)。但是你必须检查你的函数内部的排序是否成功。
猜你喜欢
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2011-09-18
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
相关资源
最近更新 更多