Рассмотрим этот полуосновный пример.
$(function() {
var appDiv = $("#appDialog");
function editSetting(s) {
$(".setting-id", appDiv).val(s.id);
$(".setting-name", appDiv).html(s.label);
$(".setting-value", appDiv).val(s.value);
appDiv.dialog("open");
}
function saveSetting() {
var sid = $(".setting-id", appDiv).val();
var v = $(".setting-value", appDiv).val();
$("#" + sid).data("value", v);
}
function resetDialog() {
$(".setting-id", appDiv).val("");
$(".setting-name", appDiv).html("");
$(".setting-value", appDiv).val("");
}
appDiv.dialog({
autoOpen: false,
modal: true,
minWidth: 300,
buttons: [{
text: "Save",
icon: "ui-icon-check",
class: "ui-priority-primary",
click: function() {
saveSetting();
appDiv.dialog("close");
}
}, {
text: "Cancel",
icon: "ui-icon-close",
click: function() {
appDiv.dialog("close");
}
}],
close: function(e, ui) {
resetDialog();
}
});
$(".app .edit-setting").button().click(function(e) {
var that = $(this).parent();
var setting = {
id: that.attr("id"),
label: $("label", that).text(),
value: that.data("value")
};
editSetting(setting);
});
$("form", appDiv).submit(function(e) {
e.preventDefault();
saveSetting();
appDiv.dialog("close");
});
$(".app > .save").button().click(function() {
var settings = {};
$(".app li").each(function(ind, el) {
var k = $(el).attr("id");
var v = $(el).data("value");
settings[k] = v;
});
//Save Settings to Storage
console.log(settings);
});
});
.app ul {
margin: 10px;
padding: 0;
list-style: none;
width: 300px;
}
.app ul li {
border: 1px solid #CCC;
padding: .5em;
margin-bottom: -1px;
}
.app ul li:first-child {
border-radius: 3px 3px 0 0;
}
.app ul li:last-child {
border-radius: 0 0 3px 3px;
}
.app ul li label {
display: inline-block;
width: 200px;
}
.app .save {
margin-left: 10px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="app ui-widget">
<ul>
<li id="set-1" data-value="A"><label>Setting 1</label><button class="edit-setting">Edit</button></li>
<li id="set-2" data-value="B"><label>Setting 2</label><button class="edit-setting">Edit</button></li>
<li id="set-3" data-value="C"><label>Setting 3</label><button class="edit-setting">Edit</button></li>
</ul>
<div id="appDialog" class="appDiv" title="Edit Setting">
<form>
<input type="hidden" class="setting-id" />
<label class="setting-name"></label>: <input type="text" class="setting-value" />
</form>
</div>
<button class="save">Save Settings</button>
</div>
Если мы рассматриваем диалог как контейнер или шаблон, мы можем заполнить отдельный диалог различными битами данных.Затем нужно открыть и закрыть его.
При нажатии кнопки «Редактировать» текущая настройка и значение загружаются в диалоговое окно до его открытия.Нажатие «X» или нажатие «Отмена» закрывает диалоговое окно без сохранения.Заключив нашу запись в <form>
, мы можем использовать Введите , чтобы отправить форму или нажать «Сохранить».Оба настроены на сохранение значения перед закрытием диалога.
Я добавил функцию сброса к обратному вызову закрытия, поэтому каждый раз, когда диалог закрывается, он удаляет все более старые данные.Это не совсем необходимо, поскольку, когда мы открываем диалоговое окно, оно заполняет данные в поля.
Мы должны где-то хранить значения.Для этого примера я использую атрибут data
.Его можно добавить как часть HTML и прочитать с помощью jQuery.Это не поддерживает.Вы можете увидеть кнопку окончательного сохранения, и это может прочитать новые значения и отправить их в localStorage или базу данных.
Надеюсь, это поможет.