Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使event.target不是指定的元素,if语句仍在运行_Javascript_Html - Fatal编程技术网

Javascript 即使event.target不是指定的元素,if语句仍在运行

Javascript 即使event.target不是指定的元素,if语句仍在运行,javascript,html,Javascript,Html,我在我的网页上有一个简单的脚本,当用户点击页面上的特定按钮时,它应该会打开一个模式 但是,由于某些原因,即使事件目标不是指定的元素,它仍然会触发模式打开。显然,这是不应该发生的,我不明白为什么会发生 下面是JavaScript: 这是HTML: 感谢所有的帮助 谢谢。这行代码有两个问题: if(e.target == modalTrigger[i] || modalTrigger[i].children) 首先,| |无法测试e.target是否是多个可能值之一。条件的评估如下所示: (e.t

我在我的网页上有一个简单的脚本,当用户点击页面上的特定按钮时,它应该会打开一个模式

但是,由于某些原因,即使事件目标不是指定的元素,它仍然会触发模式打开。显然,这是不应该发生的,我不明白为什么会发生

下面是JavaScript:

这是HTML:

感谢所有的帮助


谢谢。

这行代码有两个问题:

if(e.target == modalTrigger[i] || modalTrigger[i].children)
首先,| |无法测试e.target是否是多个可能值之一。条件的评估如下所示:

(e.target == modalTrigger[i]) || modalTrigger[i].children
第二个问题是modalTrigger[i]。children是一个列表。它本身永远是一个真实的价值

所以你的if条件总是正确的

如果要测试e.target是modalTrigger[i]还是modalTrigger[i]的后代,我的方法是使用.parentNode属性从e.target向上导航,查看modalTrigger[i]是否是祖先:

功能包含家长、孩子{ while child!=null{ 如果父项===子项,则返回true; child=child.parentNode; } 返回false; } document.onclick=function{ var modalTrigger=document.queryselectoral.ts-modal\u触发器, modals=document.queryselectoral.ts-modal, 我 fori=0;i这是Overlythe | |运算符的工作方式与您似乎认为的不同。是否希望if条件测试目标是模态触发器还是其子级之一?或者操作员检查是否满足其中任何一个条件。即使未定义e.target,但第二个条件为true,也将执行for循环。@nnnnnn不,我知道是这样的。然而,这个人说这样做是可以的,如果我把它改成正确的话,它就不起作用了。这个答案是错误的。你不能像那样使用| |来测试一个值是否是几个值中的一个。@nnnn显然是哈哈哈。介意帮我吗?谢谢+1对于真正深入了解问题所在以及我如何能做得更好:
if(e.target == modalTrigger[i] || modalTrigger[i].children)
(e.target == modalTrigger[i]) || modalTrigger[i].children