为什么jQuery focus()只发射一次



我有一个铬扩展名,它在特定的URL中添加了iframe。

我创建了一个快捷键,将焦点移至iframe中的输入框。

内容脚本将消息发送给背景,其中iframe。

它效果很好 - 一次。

  • 下面代码中的控制台消息(这是iframe js文件中的(始终发射 - 因此我知道该消息正在通过
  • 如果我更改代码以将值插入到输入中,则每次都可以使用
  • 我添加了$('#searchlibrarytb'(。blur((;对于输入框的成功处理程序...这似乎可以清除内容,然后将重点放在输入上的后续消息起作用。只有当您专注于输入时,鼠标却不在(无需输入任何内容并触发成功处理程序(才能焦点。通过一次反复试验和错误,我认为问题是我设置了一次焦点,即使我单击回到主窗口之后,iFrame仍认为该元素仍然具有焦点。因此,这条路径之所以可以使用,是因为我从程序上模糊了输入。因此,解决方案必须采取一些措施来清除/删除第一次迭代中的焦点集。
    • 我有一个"焦点清除iframe js文件中的任何值"行,而当消息通过时,光标不会留在输入中,确实清除了输入中的任何文本通过。

我读过一些关于焦点((仅在Chrome上工作的旧线程...我不敢相信这是真的。我认为这是由于某种事件增加了一倍...

有什么想法吗?

这是iframe JS中的消息接收器。同样,这总是会收到消息以关注输入。第一次通话之后,它只是没有这样做。刷新页面重置事物,消息传递将奏效一次。

谢谢!

  chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
    if (request.method === "focusToolbar"){
      console.log('Receiving message from background to focus toolbar in aSearch.js...');
      // $('#searchLibraryTB').on("focus", function(){
      //   console.log('search already had focus...');
      //   // $('#searchLibraryTB').val("this sux");
      //   $('#searchLibraryTB').off( "focus" );
      //   // $('#searchLibraryTB').focus();
      // });
      $('#searchLibraryTB').focus();
    }
  });

有时在stackoverflow中写出您的问题可以帮助您思考...

我在焦点之前添加了一个模糊的事件...以确保元素不关注第二和后续消息...

这是一个技巧。

  $('#searchLibraryTB').blur();
  $('#searchLibraryTB').focus();

最新更新