javascript - 不允许拖动两个对象来清空 div
问题描述
我为自己设定了为幼儿制作一些简单游戏的任务,以帮助他们赶上进度。我拖着我过去的编程日子。令人惊讶的是你忘记了多少,改变了多少!我一直很享受它并且喜欢解决问题。
我已经到了一个我不明白的地步。
我有 10 个计数器,它们都是单独的计数器,包含在页面顶部的一个 div 中。我有 10 个空的 div 框来拖动计数器。我设法将计数器拖到空的 div 上。问题是我不希望孩子们能够将多个柜台拖到一个盒子上。
我在这里发现了一个类似的问题并提出了建议(这是有道理的) - 检查 div 是否有任何子节点。如果没有,那么您可以删除计数器。如果是,则显示错误消息。
但是现在发生的事情是,如果我拖动一个计数器,它会留在框中。它还允许我将另一个计数器拖到同一个框(似乎只是替换第一个计数器)。它虽然不允许我拖动第三个计数器。当我尝试这样做时,它会显示错误。
我试图在错误中显示子节点的数量,并且它仅在将第二个计数器放入 div 框后才注册一个子节点。
为什么它允许我拖动第二个计数器。几乎就像它不承认第一个反阻力是孩子一样。
任何帮助表示赞赏。你会让我开心的!
function onDragStart(event) {
event.dataTransfer.setData('text/plain', event.target.id);
}
function onDragOver(event) {
event.preventDefault();
}
function onDrop(event) {
event.preventDefault();
var id = event.dataTransfer.getData('text');
if (event.target.hasChildNodes()) {alert("That is not possible")} else {
event.target.appendChild(document.getElementById(id))}
event.dataTransfer.clearData();
}
这是HTML。对不起,我没有添加它。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Ten Frame Example</title>
</head>
<body onload="generateRandomNumber ()">
<div id = "counterStore" ondragover="onDragOver(event);" ondrop="onDrop(event)"">
<p>
<img src="counter.png" id = "counterOne" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterTwo" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterThree" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterFour" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterFive" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterSix" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterSeven" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterEight" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterNine" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
<img src="counter.png" id = "counterTen" height = "100" width = "100" draggable = "true" ondragstart="onDragStart(event);">
</p>
</div>
<p> <h1>Drag <span id="myRandomNumber"></span> counters to the ten frame</h1></p>
<div class="divTable tenFrame">
<div class="divTableBody">
<div class="divTableRow">
<div class="divTableCell" id = "cellOne" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellTwo" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellThree" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellFour" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellFive" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div>
</div>
<div class="divTableRow">
<div class="divTableCell" id = "cellSix" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellSeven" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellEight" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellNine" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div><div class="divTableCell" id = "cellTen" ondragover="onDragOver(event);" ondrop="onDrop(event);"></div>
</div>
</div>
</div>
<p></p>
<button type="button" onclick="myFindTotal()">Click to check if you are correct</button>
<div id ="Results">
This is where the result will be displayed
</div>
<script src="script.js"></script>
</body>
</html>
这是CSS - 认为问题必须在这里。我从其中一个 html 生成器中复制了它。
div.tenFrame {
border: 2px solid #000000;
background-color: #FFFFFF;
width: 600px;
height: 240px;
text-align: left;
}
.divTable.tenFrame .divTableCell, .divTable.tenFrame .divTableHead {
border: 1px solid #000000;
width: 20%;
height: 50%;
object-fit: cover;
vertical-align: middle;
text-align: center;
}
.tenFrame.outerTableFooter .tableFootStyle {
padding: 3px 5px;
}
.divTable{ display: table; }
.divTableRow { display: table-row; }
.divTableHeading { display: table-header-group;}
.divTableCell, .divTableHead { display: table-cell;}
.divTableHeading { display: table-header-group;}
.divTableFoot { display: table-footer-group;}
.divTableBody { display: table-row-group;}
#counterStore {
background-color: gray;
width: 550px;
height: 250px;
position: relative;
}
解决方案
感谢您发布 HTML。
您发布的 HTML 存在一些问题:
counterstore
div 在 onDrop 事件上有两个结束演讲标记 :ondrop="onDrop(event)""
h1
标签内也不能有p
标签。它可能在某些浏览器中有效,但无效。在 onDrop 处理程序中,您没有按 ID 过滤,也没有检查相关的 nodeType
解决这些问题后,我无法重现您遇到的问题。
这是一个显示它工作的 jsFiddle:https ://jsfiddle.net/odL19462/
我强烈建议使用 IDE 进行开发!它会检测到这些问题。我更喜欢 PHPStorm,但也有像 VSCode 这样的免费替代品。
(我添加了一些样式,因为没有 css。我还实现了将它们拖回商店)。
推荐阅读
- delphi - 将带有证书处理的 2007 C++Builder SOAP 代码移至 Delphi2018-Indy10
- php - 带有 PayPal REST API 的信用卡
- sas - Proc Report - 两个表的行
- python - 芹菜任务未在部署在 Heroku 上的 Django 应用程序中执行
- reactjs - 在创建反应应用程序中使用两种不同类型的 React 导致反应错误(在未安装的组件上调用了 findDOMNode。)
- java - 商米V1s设备-打印机打印完成后Java回调不起作用
- tensorflow - Keras如何保存指定的变量?
- javascript - 我想让 Javascript 对象动态化
- angularjs - 量角器:by.model 在自定义指令中找不到元素
- asp.net - 如何使用数据库而不是资源文件来翻译我的 ASP.NET 应用程序?