【发布时间】:2019-08-03 15:57:54
【问题描述】:
当按钮被放到 div 调用“timeslot”中时,我试图生成新的预设按钮,我不知道该怎么做,所以我做了一个函数调用“init()”,它删除了所有按钮在列表中生成所有新的预设按钮。但是,这不是通过删除列表中的所有按钮并再次生成所有按钮来生成新按钮的好方法。以下是我的代码。
HTML
时间段的样式表
<style type="text/css">
.timeSlot{
width: 100%;
height: 3rem;
border: 1px solid rgb(131, 100, 100);
}
</style>
html 的主要代码我还使用了引导程序中的一些样式(用于按钮)
<div class="timeSlot">
</div>
<div class="timeSlot">
</div>
<div class="timeSlot">
</div>
<div class="list">
<input type="text" placeholder="Add New Events">
<div class="preset"><button class="add btn btn-primary"><span><i class="fa fa-trash"></i></span>Eat</button></div>
<div class="preset"><button class="add btn btn-success"><span><i class="fa fa-trash"></i></span>Workout</button></div>
<div class="preset"><button class="add btn btn-warning"><span><i class="fa fa-trash"></i></span>Sleep</button></div>
<div class="preset"><button class="add btn btn-info"><span><i class="fa fa-trash"></i></span>Laundry</button></div>
<div class="preset"><button class="add btn btn-dark"><span><i class="fa fa-trash"></i></span>Study</button></div>
</div>
Javascript
$("button").draggable({cancel:false ,cursor: "crosshair", revert: "invalid"});
输入框通过输入文字生成新按钮
$("input[type='text']").keypress(function(event){
if (event.which === 13) {
var todoText = $(this).val();
$(this).val("");
$(".list").append("<div class=\"preset\"><button class=\"add btn btn-secondary\"><span><i class=\"fa fa-trash\"></i></span> " + todoText + "</button></div>");
$("button").draggable({cancel:false ,cursor: "crosshair", revert: "invalid"});
}
});
初始函数
function init(){
$(".list").find(".preset").remove();
$(".list").append("<div class=\"preset\"><button class=\"add btn btn-primary\"><span><i class=\"fa fa-trash\"></i></span>Eat</button></div><div class=\"preset\"><button class=\"add btn btn-success\"><span><i class=\"fa fa-trash\"></i></span>Workout</button></div><div class=\"preset\"><button class=\"add btn btn-warning\"><span><i class=\"fa fa-trash\"></i></span>Sleep</button></div><div class=\"preset\"><button class=\"add btn btn-info\"><span><i class=\"fa fa-trash\"></i></span>Laundry</button></div><div class=\"preset\"><button class=\"add btn btn-dark\"><span><i class=\"fa fa-trash\"></i></span>Study</button></div>");
$("button").draggable({cancel:false ,cursor: "crosshair", revert: "invalid"});}
拖放功能
$(".timeSlot").droppable({ accept: ".add",
drop: function(event, ui) {
console.log("drop");
$(this).removeClass("border").removeClass("over");
var dropped = ui.draggable;
var droppedOn = $(this);
$(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn);
init();
},
over: function(event, elem) {
$(this).addClass("over");
console.log("over");
}
,
out: function(event, elem) {
$(this).removeClass("over");
}
});
所以问题是当我使用输入生成一些新按钮时,如果我使用任何按钮放下,其余的新生成按钮就会消失。当按钮被拖动到列表中或放入 div 时,我正在寻找一种方法来保留按钮(包括新的生成按钮)。显然,初始功能不是一个好方法,因为存在一些逻辑错误(当另一个按钮被放下时,新的生成按钮会消失)。谁能帮我弄清楚?
一些小的编辑,所以我想要的是列表在拖放相同的按钮时自动生成相同的按钮。例如,当在时间段框中拖放“吃”按钮时,列表会自动在列表中生成一个新的“吃”按钮,这样我就可以在时间段框中添加另一个“吃”按钮,而无需在输入以生成“吃”按钮。
【问题讨论】:
-
澄清一下,我的理解是:你想要一个初始的按钮列表和一种添加新自定义按钮的方法(使用输入框)。并且您希望能够从列表中拖动按钮并放入“时隙”框中,而无需从列表中删除其他按钮。对吗?
-
是的,但除了不删除其他按钮外,我仍希望在框中保留与拖放相同的按钮,这意味着当我拖放列表中的任何按钮时,列表会自动生成我拖动的相同按钮,因此我不必使用输入框再次创建具有相同事件的新按钮。
-
我在下面的答案中更新了我的代码。看看这是不是你需要的:)
标签: javascript jquery html jquery-ui bootstrap-4