为什么javascripts不';我不能在iphone safari上工作

为什么javascripts不';我不能在iphone safari上工作,javascript,jquery,Javascript,Jquery,三天来,我一直在努力解决这个脚本的问题,现在我看到这个脚本不想在手机上工作。这些脚本必须关闭iframe,然后单击模式或图标。关闭。它可以在PC上完美工作,但不能在iphone上。还添加了代码笔和网页www.thehoney.lt也许有人知道解决方案 //获取模式 var modal=document.getElementById('popuboxOnePosition'); var modal2=document.getElementById('popuboxTwoPosition'); va

三天来,我一直在努力解决这个脚本的问题,现在我看到这个脚本不想在手机上工作。这些脚本必须关闭iframe,然后单击模式或图标。关闭。它可以在PC上完美工作,但不能在iphone上。还添加了代码笔和网页www.thehoney.lt也许有人知道解决方案

//获取模式
var modal=document.getElementById('popuboxOnePosition');
var modal2=document.getElementById('popuboxTwoPosition');
var modal3=document.getElementById('popuboxThreePosition');
var modal4=document.getElementById('popuboxFourPosition');
var exit=document.getElementById('close1');
var exit2=document.getElementById('close2');
var exit3=document.getElementById('close3');
var exit4=document.getElementById('close4');
//当用户单击模式之外的任何位置时,将其关闭
window.onclick=函数(事件){
如果(event.target==模态){
$('.iframe1')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal.style.display=“无”;
}
如果(event.target==modal2){
$('.iframe2')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal2.style.display=“无”;
}
如果(event.target==modal3){
$('.iframe3')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal3.style.display=“无”;
}
如果(event.target==modal4){
$('.iframe4')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal4.style.display=“无”;
}
如果(event.target==退出){
$('.iframe1')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal.style.display=“无”;
}
如果(event.target==exit2){
$('.iframe2')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal2.style.display=“无”;
}
如果(event.target==exit3){
$('.iframe3')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal3.style.display=“无”;
}
如果(event.target==exit4){
$('.iframe4')[0].contentWindow.postMessage('{“事件”:“命令”,“函数”:“+”停止视频“+”,“参数”:“}”和“*”);
modal4.style.display=“无”;
}
}

不确定为什么window.onclick事件没有在这些模式弹出窗口上触发

我在codepen HTML中注意到的一点是,在两个地方有window.onclick=函数。这并不是关闭modals不起作用的原因,只是为了让您知道不能有两个window.onclick回调-最后一个回调将覆盖以前的所有回调。如果您需要多个
onClick
calback,则必须使用
window.addEventListener('click',函数)。通过这种方式,可以在单个DOM元素()上附加多个事件

在你的问题上,正如我上面提到的,如果我没有投入太多的时间,我无法理解为什么它不起作用

然而,我会采取稍微不同的方法来附加那些
onClick
事件来关闭模态:

$('.modal').on('click', function (e) {
  var $this = $(this);
  var $target = $(e.target);
  var $iframe = $this.find('iframe');

  if (!$target.is($iframe)) {
    $iframe[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
    $this.fadeOut(100);
  }
});
通过这种方式,您将
onClick
侦听器直接附加到模式弹出窗口,并且
click
事件不必在DOM链上传播(冒泡)。我最好的猜测是,
单击
事件在某处被中断,并且从未到达
窗口
。我建议阅读事件冒泡,因为它通常是附加到
窗口
文档
或DOM树更高的其他DOM元素的事件不触发的原因()

与您的
onClick
函数相比,我还缩短了逻辑。当我们将
onClick
事件直接附加到弹出窗口时,我们确切地知道单击了哪个弹出窗口(单击的弹出窗口被分配给
)。然后,我们需要检查是否单击了
iframe
,如果没有,则停止视频并关闭模式

公平地说(清楚地说),我们甚至不必检查是否单击了
iframe
,因为
iframe
上的单击事件也被停止,实际上永远不会传播到弹出窗口。我已经添加了该检查以供将来参考,因此很清楚如何检查我们单击的内容


希望这能有所帮助。

野生动物园很干燥,这是维护地狱。你应该使用loop或者其他智能的东西。