javascript - 单击“X”时似乎无法关闭模式
问题描述
似乎无法让我的模式在 X 上关闭。第一个模式关闭,但其他模式没有。下面是代码片段。不是全部。如果需要,我可以发布全部内容。
我有 window.onclick 功能,所以如果我在任何模式之外单击它会关闭,但 X 似乎只在我显示的第一个模式上工作。有任何想法吗?
<body>
<div class="page">
<!-- Trigger/Open The Modal -->
<button id="startButton" class="button"></button>
<!-- The Modal -->
<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<span class="close">×</span>
<select id="selectMaterial"></select>
<div id="thickness">
<!-- <input id="enterThickness"> -->
<input id='enterThickness' class="input" type="number" min="0" max="50" step="1"
placeholder='Enter Material Thickness in Millimeters' /><span class="input-group-text"> /MM
</span>
</div>
<div id="rpm">
<!-- <input id="enterThickness"> -->
<input id='enterRPM' class="input" type="number" min="5000" max="60000" step="5000"
placeholder='Enter Max Spindle RPM' /><span class="input-group-text"> /RPM </span>
</div>
<div id="bitList">
<button id="bitsButton" class="button">SHOW AVAILABLE MILLING BITS</button>
</div>
<!-- <button id="calcButton" class="calcButton">CALCULATE CUTTING PARAMETERS</button> -->
</div>
</div>
<div id="myModal2" class="modal2">
<!-- Modal content -->
<div class="modal-content">
<span class="close">×</span>
<div id="displayInput"></div>
<select id="displayBits"></select>
<div id="selectBit">
<button id="selectBitsButton" class="button">SELECT BIT AND CALCULATE</button>
</div>
</div>
</div>
<div id="myModal3" class="modal3">
<!-- Modal content -->
<div class="modal-content">
<span class="close">×</span>
<div id="noBits">
<button id="startOverButton" class="button">START OVER</button>
</div>
</div>
</div>
</div>
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks on <span> (x), close the modal
span.onclick = function (event) {
if (event.target == modal || modal2 || modal3) {
modal.style.display = "none";
}
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function (event) {
if (event.target == modal) {
modal.style.display = "none";
}
if (event.target == modal2) {
modal2.style.display = "none";
}
if (event.target == modal3) {
modal3.style.display = "none";
}
解决方案
转储我的完整代码。看起来它在这里也不起作用。所以我有点不对劲。如果我只插入 html 的部分和我正在处理的脚本,它似乎可以工作,所以我拥有的其他东西会导致它失败而没有错误。
// Get the modal
var modal = document.getElementById("myModal");
var modal2 = document.getElementById("myModal2");
var modal3 = document.getElementById("myModal3");
// Get the button that opens the modal
var startButton = document.getElementById("startButton");
// // Get the <span> element that closes the modal
// When the user clicks on the button, open the modal
startButton.onclick = function() {
enterThickness.value = null;
enterRPM.value = null;
selectMaterial.value = "Select Material";
thickness.style.visibility = "hidden";
rpm.style.visibility = "hidden";
bitList.style.visibility = "hidden";
modal.style.display = "block";
displayBits.value = null;
displayBits.value = "Select Bit";
//startOverButton.style.visibility = "hidden",
}
var created = false;
var materialValue;
var thicknessValue;
var enteredThickness = document.getElementById(enterThickness);
var rpmValue;
var enteredRPM = document.getElementById(enterRPM);
var select = document.getElementById('selectMaterial');
var select2 = document.getElementById('displayBits');
var materials = [{
name: "Select Material"
},
{
name: "Acrylic",
metal: false,
plastic: true,
multipurpose: true,
soft: false,
hard: true
},
{
name: "Aluminum",
metal: true,
plastic: false,
multipurpose: false,
soft: false,
hard: true
},
{
name: "Armed Graphite Gasket",
plastic: true,
multipurpose: true,
soft: false,
hard: true
},
{
name: "Hard Brass",
metal: true,
plastic: false,
multipurpose: false,
soft: false,
hard: true
},
{
name: "Hard Foam",
metal: false,
plastic: true,
multipurpose: true,
soft: false,
hard: true
},
{
name: "PVC - Soft",
metal: false,
plastic: true,
multipurpose: true,
soft: true,
hard: false
},
{
name: "PVC - Rigid",
metal: false,
plastic: true,
multipurpose: true,
soft: false,
hard: true
},
{
name: "Polycarbonate - Soft",
metal: false,
plastic: true,
multipurpose: true,
soft: true,
hard: false
},
{
name: "Polycarbonate - Rigid",
metal: false,
plastic: true,
multipurpose: true,
soft: false,
hard: true
},
{
name: "Polypropylene",
metal: false,
plastic: true,
multipurpose: true,
soft: true,
hard: false
},
{
name: "Wood - Soft",
metal: false,
plastic: true,
multipurpose: true,
soft: true,
hard: false
},
{
name: "Wood - Hard",
metal: false,
plastic: true,
multipurpose: true,
soft: false,
hard: true
}
];
var bits = [
{
name: 'M1-308U',
material: 'metal',
ced: 3,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 60000,
soft: .003,
hard: .005
},
{
name: 'M1-308UC',
material: 'metal',
ced: 3,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 60000,
soft: .003,
hard: .005
},
{
name: 'M1-408U',
material: 'metal',
ced: 4,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 60000,
soft: .004,
hard: .006
},
{
name: 'M1-506D',
material: 'metal',
ced: 5,
cel: 6,
flutes: 1,
angle: 'down',
rpm: 50000,
soft: .005,
hard: .007
},
{
name: 'M1-506U',
material: 'metal',
ced: 5,
cel: 6,
flutes: 1,
angle: 'up',
rpm: 55000,
soft: .005,
hard: .007
},
{
name: 'M1-506UC',
material: 'metal',
ced: 5,
cel: 6,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .006,
hard: .008
},
{
name: 'M1-608U',
material: 'metal',
ced: 6,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .006,
hard: .008
},
{
name: 'M1-608UC',
material: 'metal',
ced: 6,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .003,
hard: .006
},
{
name: 'M1-608UC',
material: 'metal',
ced: 6,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .003,
hard: .006
},
{
name: 'M2-406U',
material: 'metal',
ced: 4,
cel: 6,
flutes: 2,
angle: 'up',
rpm: 50000,
soft: .003,
hard: .006
},
{
name: 'M2-606U',
material: 'metal',
ced: 6,
cel: 6,
flutes: 2,
angle: 'up',
rpm: 50000,
soft: .005,
hard: .007
},
{
name: 'MZ-303U',
material: 'metal',
ced: 3,
cel: 3,
flutes: 2,
angle: 'up',
rpm: 50000,
soft: .003,
hard: .005
},
{
name: 'P1-208D',
material: 'plastic',
ced: 2,
cel: 8,
flutes: 1,
angle: 'down',
rpm: 60000,
soft: .003,
hard: .005
},
{
name: 'P1-208U',
material: 'plastic',
ced: 2,
cel: 8,
flutes: 1,
angle: 'up',
rpm: 60000,
soft: .003,
hard: .005
},
{
name: 'P1-306U',
material: 'plastic',
ced: 3,
cel: 6,
flutes: 1,
angle: 'up',
rpm: 60000,
soft: .004,
hard: .006
},
{
name: 'P1-312D',
material: 'plastic',
ced: 2,
cel: 8,
flutes: 1,
angle: 'down',
rpm: 60000,
soft: .004,
hard: .005
},
{
name: 'P1-312U',
material: 'plastic',
ced: 3,
cel: 12,
flutes: 1,
angle: 'up',
rpm: 60000,
soft: .004,
hard: .006
},
{
name: 'P1-418D',
material: 'plastic',
ced: 4,
cel: 18,
flutes: 1,
angle: 'down',
rpm: 40000,
soft: .005,
hard: .006
},
{
name: 'P1-418U',
material: 'plastic',
ced: 4,
cel: 18,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .005,
hard: .007
},
{
name: 'P1-518D',
material: 'plastic',
ced: 5,
cel: 18,
flutes: 1,
angle: 'down',
rpm: 40000,
soft: .006,
hard: .008
},
{
name: 'P1-518U',
material: 'plastic',
ced: 5,
cel: 18,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .006,
hard: .009
},
{
name: 'P1-613U',
material: 'plastic',
ced: 6,
cel: 13,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .008,
hard: .012
},
{
name: 'P1-613D',
material: 'plastic',
ced: 6,
cel: 13,
flutes: 1,
angle: 'down',
rpm: 50000,
soft: .008,
hard: .012
},
{
name: 'P1-625U',
material: 'plastic',
ced: 6,
cel: 25,
flutes: 1,
angle: 'up',
rpm: 50000,
soft: .008,
hard: .012
},
{
name: 'P1-625D',
material: 'plastic',
ced: 6,
cel: 25,
flutes: 1,
angle: 'down',
rpm: 50000,
soft: .008,
hard: .012
},
{
name: 'P2-418D',
material: 'plastic',
ced: 4,
cel: 18,
flutes: 2,
angle: 'down',
rpm: 50000,
soft: .005,
hard: .007
},
{
name: 'P2-418U',
material: 'plastic',
ced: 4,
cel: 18,
flutes: 2,
angle: 'up',
rpm: 60000,
soft: .005,
hard: .007
},
{
name: 'P2-520D',
material: 'plastic',
ced: 5,
cel: 20,
flutes: 2,
angle: 'down',
rpm: 50000,
soft: .006,
hard: .008
},
{
name: 'P2-520U',
material: 'plastic',
ced: 5,
cel: 20,
flutes: 2,
angle: 'up',
rpm: 60000,
soft: .006,
hard: .009
},
{
name: 'P2-613U',
material: 'plastic',
ced: 6,
cel: 13,
flutes: 2,
angle: 'up',
rpm: 60000,
soft: .008,
hard: .012
},
{
name: 'P2-625D',
material: 'plastic',
ced: 6,
cel: 25,
flutes: 2,
angle: 'down',
rpm: 50000,
soft: .008,
hard: .012
},
{
name: 'P2-625U',
material: 'plastic',
ced: 6,
cel: 25,
flutes: 2,
angle: 'up',
rpm: 60000,
soft: .008,
hard: .012
},
{
name: 'X2-418S',
material: 'multipurpose',
ced: 4,
cel: 18,
flutes: 2,
angle: 'straight',
rpm: 60000,
soft: .006,
hard: .008
},
{
name: 'X2-420D',
material: 'multipurpose',
ced: 4,
cel: 20,
flutes: 2,
angle: 'down',
rpm: 60000,
soft: .006,
hard: .008
},
{
name: 'X2-420U',
material: 'multipurpose',
ced: 4,
cel: 20,
flutes: 2,
angle: 'up',
rpm: 60000,
soft: .006,
hard: .008
},
{
name: 'X2-520C',
material: 'multipurpose',
ced: 5,
cel: 20,
flutes: 2,
angle: 'compression',
rpm: 50000,
soft: .004,
hard: .006
},
{
name: 'X2-625C',
material: 'multipurpose',
ced: 6,
cel: 20,
flutes: 2,
angle: 'compression',
rpm: 50000,
soft: .006,
hard: .010
},
{
name: 'X2-418S',
material: 'multipurpose',
ced: 4,
cel: 18,
flutes: 2,
angle: 'straight',
rpm: 60000,
soft: .006,
hard: .008
},
{
name: 'X2-625D',
material: 'multipurpose',
ced: 6,
cel: 25,
flutes: 2,
angle: 'down',
rpm: 50000,
soft: .008,
hard: .010
},
{
name: 'X2-625D',
material: 'multipurpose',
ced: 6,
cel: 25,
flutes: 2,
angle: 'straight',
rpm: 50000,
soft: .006,
hard: .009
},
{
name: 'X2-625U',
material: 'multipurpose',
ced: 6,
cel: 25,
flutes: 2,
angle: 'up',
rpm: 50000,
soft: .008,
hard: .010
},
{
name: 'X2-650U',
material: 'multipurpose',
ced: 6,
cel: 50,
flutes: 2,
angle: 'straight',
rpm: 40000,
soft: .007,
hard: .009
},
];
window.onclick = function(event) {
document.getElementsByClassName("close");
window.onclick = function(event) {
if (event.target.id == "close1") {
document.getElementById('myModal').style.display = "none";
}
if (event.target.id == "close2") {
document.getElementById('myModal2').style.display = "none";
}
if (event.target.id == "close3") {
document.getElementById('myModal3').style.display = "none";
}
}
if (event.target == modal) {
modal.style.display = "none";
}
if (event.target == modal2) {
modal2.style.display = "none";
}
if (event.target == modal3) {
modal3.style.display = "none";
}
if (!event.target.matches('.materialButton')) {
if (!created) {
for (var i = 0; i < materials.length; i++) {
var opt = document.createElement('option');
opt.innerHTML = materials[i].name;
opt.value = materials[i].name;
select.appendChild(opt);
}
created = true;
}
}
selectMaterial.addEventListener('change', function() {
thickness.style.visibility = "hidden";
rpm.style.visibility = "hidden";
bitList.style.visibility = "hidden";
if (this.value != "Select Material") {
thickness.style.visibility = "visible";
}
});
var thickness = document.getElementById("thickness");
enterThickness.addEventListener('change', function() {
thicknessValue = document.getElementById('enterThickness').value;
rpm.style.visibility = "hidden";
bitList.style.visibility = "hidden";
if (thicknessValue > 50) {
window.alert("Please enter a lower material thickness.");
}
if (materialValue != "Select Material") {
rpm.style.visibility = "visible";
}
});
var rpm = document.getElementById("rpm");
enterRPM.addEventListener('change', function enteredRPM() {
rpmValue = document.getElementById('enterRPM').value;
bitList.style.visibility = "hidden";
if (rpmValue > 60000 | rpmValue < 5000) {
window.alert("Please enter spindle RPM between 5,000 and 60,000.");
}
if (rpmValue != null) {
bitList.style.visibility = "visible";
}
});
bitsButton.onclick = (function() {
var userInputArray = new Array;
materialValue = document.getElementById("selectMaterial").value;
userInputArray = [materialValue, thicknessValue, rpmValue];
modal.style.display = "none";
modal2.style.display = "visible";
modal2.style.display = "block";
document.getElementById('displayInput').innerHTML = 'Compatible bits for' + " " + thicknessValue + " " + "mm" + " " + materialValue + " " +
"at" + " " + rpmValue + " " + "RPM as follows;";
var created2 = false;
if (!created2) {
const material = materials.find(item => item.name === materialValue);
const selectedBits = bits.filter(bit =>
(material.plastic && bit.material === 'plastic' && bit.cel >= thicknessValue) ||
(material.metal && bit.material === 'metal' && bit.cel >= thicknessValue) ||
(material.multipurpose && bit.material === 'multipurpose' && bit.cel >= thicknessValue)
);
if (selectedBits != undefined || selectedBits.length != 0) {
for (var i = 0; i < selectedBits.length; i++) {
var opt = document.createElement('option');
opt.innerHTML = selectedBits[i].name;
opt.value = selectedBits[i].name;
select2.appendChild(opt);
}
if (selectedBits === undefined || selectedBits.length == 0) {
// array empty or does not exist
modal2.style.display = "none";
modal3.style.display = "visible";
modal3.style.display = "block";
noBits.style.visibility = 'visible';
startOverButton.style.visibility = 'visible';
created2 = false;
};
}
}
created2 = true;
});
};
<head>
<meta charset="utf-8" />
<meta name="description" content="Bits Blades Belts">
<!--<meta name="keywords" content="VICOM-128, HTML Contact Form">-->
<meta name="keywords" content="Zund, Esko, Kongsberg, MCT, Mikkelsen">
<meta name="author" content="Nikolai Mikkelsen">
<!--Meta data above-->
<title>
Bits Blades Belts
</title>
<!--Title-->
<link rel="stylesheet" href="css/master.css">
<!--Link to style sheet-->
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<link rel="shortcut icon" href="images/favicon.png">
</head>
<body>
<div class="page">
<header>
<div class="img_header">
<img src="images/headLogo.png" alt="HOME" />
<h1 class="blink">YOUR TRUSTED CONSUMABLES PROVIDER</h1>
</div>
</header>
<nav id="mobile_menu"></nav>
<nav id="nav_menu">
<ul>
<li>
<a href="index.html" title="Home">
<img src="images/home.png" alt="HOME" />
</a>
</li>
<li class="lastItem">
<a href="cnc_calculator.html">CNC CALCULATOR</a>
</li>
<li>
<a href="about.html">ABOUT US</a>
</li>
</ul>
</nav>
<main>
<article class="marginUpper boxit">
<h3>Welcome to the CNC Calculator</h3>
<p>
The CNC Calculator is the first step in developing a filtering system that will allow a customer to select a material and thickness of material to be processed. This will then provide a list of bits (products) that are compatible with the material and
thickness. Once the material and thickness are determined and the bit selected, the calculator will then ask the user to enter the max RPM of the spindle. From there the application will calculate the feed rate, number of passes, and the RPM
to process at.
</p>
<p>
<br />Next semester the goal is to port this to PHP and expand on it the functionality to be able to filter by machine (manufacture), material group, sub-category, system tool options available, and will then recommend the milling or cutting
tool and its feed rates, and if applicable, the number of passes and RPM.
</p>
</article>
<article class="marginUpper boxit">
<h3>Click Below To Select Start the CNC Calculator</h3>
</article>
<!-- Trigger/Open The Modal -->
<button id="startButton" class="button">OPEN CALCULATOR</button>
<!-- The Modal -->
<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<span class="close" id="close1">×</span>
<select id="selectMaterial"></select>
<div id="thickness">
<!-- <input id="enterThickness"> -->
<input id='enterThickness' class="input" type="number" min="0" max="50" step="1" placeholder='Enter Material Thickness in Millimeters' /><span class="input-group-text"> /MM
</span>
</div>
<div id="rpm">
<!-- <input id="enterThickness"> -->
<input id='enterRPM' class="input" type="number" min="5000" max="60000" step="5000" placeholder='Enter Max Spindle RPM' /><span class="input-group-text"> /RPM </span>
</div>
<div id="bitList">
<button id="bitsButton" class="button">SHOW AVAILABLE MILLING BITS</button>
</div>
<!-- <button id="calcButton" class="calcButton">CALCULATE CUTTING PARAMETERS</button> -->
</div>
</div>
<div id="myModal2" class="modal2">
<!-- Modal content -->
<div class="modal-content">
<span class="close" id="close2">×</span>
<div id="displayInput"></div>
<select id="displayBits"></select>
<div id="selectBit">
<button id="selectBitsButton" class="button">SELECT BIT AND CALCULATE</button>
</div>
</div>
</div>
<div id="myModal3" class="modal3">
<!-- Modal content -->
<div class="modal-content">
<span class="close" id="close3">×</span>
<div id="noBits">No router bits are available for this material and/or thickness.
<button id="startOverButton" class="button">START OVER</button>
</div>
</div>
</div>
</div>
</main>
</body>
//
<script src="script.js"></script>
<!--Link to scripts-->
</html>
推荐阅读
- prolog - 从Prolog中的文本文件读取时如何忽略每行的第一个和最后一个元素?
- python - TypeError: 'int' 类型的对象没有 len() *减法*
- android - 由 SwipeRefreshLayout 触发时在 RecyclerView 中执行 LayoutAnimation 时出现问题
- python - 如何判断字典中特定键的值是否是字典,以便我可以基于此递归地解决编程问题?
- ios - 无法获取 google map api 响应来解析
- matlab - 为什么这是为神经网络执行成本函数的正确方法?
- javascript - 将数组传递给 include() javascript
- php - 编写以下代码的正确方法是什么?
- c# - 如何比较将两者都转换为 Enum 的对象和整数值?
- python - 如何使用python绘制一个条形图,每个条形都有不同的类别?