【问题标题】:Clickoutside event doen't work on iframeClickoutside 事件在 iframe 上不起作用
【发布时间】:2016-07-28 16:04:08
【问题描述】:

这是一个富文本编辑器,有一个 div 显示用户输入的内容,就像这样:

<div class=‘content’>
    <iframe data-role=text-editable.></iframe>
</div>

当我点击一个用来调用颜色面板的图标时,面板会显示出来。我希望当我点击面板外时,它会被隐藏。所以我的代码是:

var  color_panel = $('.color-panel');
     color_panel.on("clickoutside",        function (e) {                   
    var t = $(e.target);            
    if ($.contains(color_panel[0], t[0]))                  
        return;   
    color_panel.hide();
})

当我点击外部面板时它会消失,除非我点击 iframe。当我点击 ifame 时,没有任何反应,面板仍然显示,

求助……我想知道原因。请问……ifame不是面板外的dom元素吗?

【问题讨论】:

  • color-panel 在 javascript 中不是有效的变量名。你在编码哪种语言???
  • 对不起。符号"-"应该是''_",是下划线
  • 我假设您的 jQuery 选择器 $('color-panel') 打算选择一个类或一个 ID?应该是$('.color-panel') $('#color-panel')
  • 您必须提供您正在使用的相关代码,而不是一些充满拼写错误的随机代码。也就是说,您无法捕获跨域 iframe 的点击,但我不确定这与您的问题有关
  • 你有花哨的引号,这是一个错误。

标签: javascript jquery dom web-frontend


【解决方案1】:

您可以通过侦听网页正文元素上的点击来侦听外部点击(因此,点击任何元素),然后您可以通过制作另一个事件“当我得到点击,忽略任何其他点击”。效果正是您想要的,您可以监听外部点击:

var panelOpen = false;

$('body').click(function(event) {
  if (panelOpen) {
    panelOpen = false;
    color_panel.hide();
  }
});

$('.color_panel').click(function(event) {
  panelOpen = true;
  //callYourMethodToShowThePanelHere();
  e.preventDefault(); // these methods will stop the body click event
  e.stopPropagation();
  return false;
});

【讨论】:

  • 嗨,很好的答案,我学到了很多东西。但是在这个项目中我不能修改这么多代码。我注意到问题是,当我点击 iframe 时,我不能捕获点击事件!例如,当我console.log(e.target),当我点击iframe时什么都没有
  • 谢谢大佬,问题解决了。问题是iframe本身的事件不能被父窗口捕获,所以我需要修改代码如下:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2016-09-16
  • 2013-01-24
  • 2010-11-13
  • 2016-11-01
  • 2015-12-04
  • 2015-03-24
相关资源
最近更新 更多