【问题标题】:Paste event anomaly with jQuery in Opera在 Opera 中使用 jQuery 粘贴事件异常
【发布时间】:2013-02-25 09:44:17
【问题描述】:

我正在尝试这段代码。它的作用是当有人右键单击第一个文本框时,将焦点转移到第二个文本框,这样如果他从上下文菜单中选择Paste 选项,文本就会粘贴到第二个文本框中。 paste 事件已附加到第二个框以提醒 Foo

<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
$(document).ready(function(){

  $('.foo').contextmenu(function() {
      $('.boo').select();
      return true;
  });
$(".boo").bind("paste",function() { alert("Foo"); });
});
</script>
</head>
<body>
<input type = 'text' class = 'foo' />
<input type = 'text' class = 'boo' />
</body>
</html>

它在除 Opera 之外的所有浏览器中都能正常工作。当您右键单击并在第一个框中粘贴一些文本时,所有这些浏览器都会弹出警报。在 Opera 中,如果直接在第 2 个框中粘贴一些文本,就可以弹出警告。但是,如果您通过第一个框执行此操作,即在右键单击第一个框时将焦点转移到第二个框,以便剪贴板文本粘贴到第二个框,即使您可以清楚地看到它也不会弹出警报第二个框获得了焦点,文本被粘贴在那里就好了。谁能告诉我是什么问题,以及如何解决?

【问题讨论】:

  • Opera 浏览器不支持粘贴事件。对于 Opera,您可能可以使用 DOM 突变事件,例如DOMAttrModified 事件。
  • 但是如果不支持paste事件,当您只关注第二个框并直接将文本粘贴到其中时,如何弹出警报,通过CTRL-C CTRL-V或选择Paste from右键单击后的上下文菜单?
  • 好的,我不是 jquery 用户,但我可以想象 jquery 中的粘贴事件有一些解决方法/修复,就像在其他框架中一样。尝试调查它是如何在 jquery 的内部解决的。
  • 这就是问题所在。 paste 事件是 paste 事件,为什么焦点从另一个文本框重定向很重要?该事件仅在焦点转移后发生。因此,在这两种情况下,事件仅在第二个框获得焦点时发生。
  • @dherbolt:paste 事件在当前 Opera 版本中实现 - 自 Presto 2.10

标签: javascript jquery html opera paste


【解决方案1】:

正如您在this fiddle 中看到的那样,Opera 会在被右键单击的元素上触发paste 事件(同时插入焦点移动到的文本)。但是,正如您所看到的 hereinput 事件会在您预期的元素上触发。

谁能告诉我是什么问题,以及如何解决?

您在粘贴操作(两次单击)期间移动选择/焦点,这会使用户和浏览器感到困惑:-)。我不确定如何解决此异常,但您当然不希望仅在通过上下文菜单完成粘贴时才将粘贴移动到另一个输入。

【讨论】:

  • 我正在做的是防止用户输入除数字以外的任何数据。 CTRL-V 被处理,上下文菜单部分被留下。转移焦点后,我正在设置一个快速计时器来查找粘贴的文本是否为数字块,如果是,则将焦点转移回第一个框并将其粘贴在那里。这适用于 Firefox、Safari、Chrome 甚至 IE,我如何使其适用于 Opera?
  • 呃,我建议不要使用第二个隐藏输入,而只是在粘贴时从输入中删除无效文本。但是,如前所述,您可以在第二个元素上侦听 input 事件以识别 Opera 中的粘贴。
  • 嘿伙计,我又回来了!这次又有问题了!当我在 Opera 9、10 和 11 中试用它时,会发生以下情况:右键单击时,焦点转移到第二个框,菜单在第一个框附近弹出。但是当我粘贴时,文本被粘贴在第一个框中,焦点再次转移回第二个框!这种奇怪的行为有什么解决办法吗?
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 2015-08-18
  • 2012-07-21
  • 1970-01-01
  • 2011-08-27
相关资源
最近更新 更多