javascript - 具有每个对象的特定数据的特定菜单
问题描述
我正在尝试创建一个页面,您可以在其中创建具有特定属性的 div 的“文档”。现在我想到了name
& color
。
首先,当您单击正文时,您可以创建一个名为“something+i”(i 是其 ID)的文档,然后,当您单击特定文档时,您可以访问菜单来编辑其颜色和名称。OK
最后,当您通过单击特定关闭菜单时document
会更新。
你对如何做到这一点有任何想法吗?非常感谢您的帮助。
var i = 1;
$(function(){
$(document.body).click(function(e){
var div = $("<div />", { "class":"document", id:"document"+i })
.css({
"left": e.pageX + 'px',
"top": e.pageY + 'px'
})
.append($( "<p>document</p>")+i )
.appendTo(document.body);
$('.document').click(function(event){
event.stopPropagation();
});
$('.menu').click(function(event){
event.stopPropagation();
});
document.querySelector(".document").addEventListener("click", function(){
document.querySelector(".menu").style.display = "block";
});
document.querySelector(".validate").addEventListener("click", function(){
document.querySelector(".menu").style.display = "none";
});
i++;
});
});
body{
width: 100vw;
height: 100vh;
background: grey;
}
.document {
position: absolute;
transform: translate(-50%, -50%);
opacity: 1;
background-color: red;
resize:both;
overflow: auto;
filter: drop-shadow(0 0 0.2rem black);
}
.menu{display: none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<div class="menu">
<li><input type="text" id="name" name="name" size="10" placeholder="name"></li>
<li><input type="text" id="color" name="color" size="10" placeholder="color"></li>
<button class ="validate">OK</button>
</div>
</body>
解决方案
当您首先单击时, document
检查是否存在任何带有 ID 的菜单,如果有该菜单,则单击show
该菜单,否则创建新菜单。您可以使用clone
创建新菜单,然后添加data-id
到它并将它们附加到一些 div 下。
然后,当ok
单击按钮时,只需使用$(this).closest(".menu_copy").hide();
隐藏菜单。
演示代码:
var i = 1;
$(function() {
$(document.body).click(function(e) {
var subject = $(".menu_copy")
//check if target click doesn't have class document && not inside menu_copy
if ((!$(event.target).hasClass('document')) && (!subject.has(e.target).length)) {
var div = $("<div />", {
"class": "document",
id: "document" + i
})
.css({
"left": e.pageX + 'px',
"top": e.pageY + 'px'
})
.append($("<p>document</p>") + i)
.appendTo(document.body);
i++;
}
});
//onclick of document
$(document).on('click', '.document', function(event) {
event.stopPropagation();
var id = $(this).attr("id"); //get id
//check if there is any div with data-id
if ($("[data-id =" + id + " ]").length > 0) {
$("[data-id =" + id + " ]").show() //show it
} else {
//create new menu
var clone_menu = $(".menu_copy:first").clone();
$(clone_menu).attr("data-id", $(this).attr("id"))
$(clone_menu).css("display", "block")
$(clone_menu).appendTo(".docs"); //append inside docs
}
});
//if ok is clicked
$(document).on('click', '.validate', function(event) {
//get color and name
var name = $(this).closest(".menu_copy").find("input[name='name']").val();
var color = $(this).closest(".menu_copy").find("input[name='color']").val();
var data_id = $(this).closest(".menu_copy").attr("data-id")
$("#" + data_id).text(name);//add name
$("#" + data_id).css("color", color);//apply color
$(this).closest(".menu_copy").hide(); //hide the menu
})
});
body {
width: 100vw;
height: 100vh;
background: grey;
}
.document {
position: absolute;
transform: translate(-50%, -50%);
opacity: 1;
background-color: red;
resize: both;
overflow: auto;
filter: drop-shadow(0 0 0.2rem black);
}
.menu {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<div class="menu_copy" style="display:none">
<li><input type="text" id="name" name="name" size="10" placeholder="name"></li>
<li><input type="text" id="color" name="color" size="10" placeholder="color"></li>
<button class="validate">OK</button>
</div>
<!--added this divs new menus will go inside this -->
<div class="docs"></div>
</body>
推荐阅读
- arrays - 是否可以从第一个数字而不是最后一个数字开始进行基数排序?
- c - 在 C 中,与 malloc 和变量数组声明相关的两个给定代码片段之间有什么区别?
- javascript - 反应组件内放置的对象数组
- bash - 如何在 Bash 脚本中将变量传递给 Curl
- spring-cloud-dataflow - 需要有关如何在多个专用服务器中创建部署 spring-cloud-dataflow 应用程序以创建流的建议
- javascript - Hexo | 我在我的文章中添加了一个 Echarts 图表,但它只显示在主页上,当我点击`阅读更多`时它消失了
- java - 在android中自定义底部导航栏
- azure-iot-edge - Azure IoT Edge x86 Linux 支持
- interface - 我应该如何确定查询返回到 GraphQL 接口类型的显式类型?
- reactjs - 如何将自定义分页连接到 antd Table?