#javascript #jquery #html #twitter-bootstrap
#javascript #jquery #HTML #twitter-bootstrap
Вопрос:
В настоящее время я имею дело со страницей отправки формы, где пользователь может отправлять расходы за каждую поездку, которую они совершают в часы работы клиента. Я настроил всю форму, извлекая информацию из базы данных для выбранных полей ввода, которые у меня есть, и в настоящее время я храню ее на загрузочной карте (для эстетики, idk).
Моя проблема заключается в следующем: я хочу иметь возможность дублировать эту форму, но со значениями по умолчанию, на вкладку начальной загрузки при нажатии «Новый расход». У меня есть ссылка на вкладку «Новые расходы», работающая для динамического добавления и удаления вкладок, но я хочу, чтобы форма и ее значения по умолчанию были видны при нажатии «Новые расходы».
$(".nav-tabs").on("click", "a", function (e) {
e.preventDefault();
if (!$(this).hasClass('addNew')) {
$(this).tab('show');
}
})
.on("click", "span", function () {
var anchor = $(this).siblings('a');
$(anchor.attr('href')).remove();
$(this).parent().remove();
$(".nav-tabs li").children('a').first().click();
});
$('.addNew').click(function (e) {
e.preventDefault();
var id = $(".nav-tabs").children().length; //think about it ;)
var tabId = 'expense_' id;
$(this).closest('li').before('<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#expense_' id '">New Expense</a><span>x</span></li>');
$('.tab-content').append('<div class="tab-pane" id="' tabId '">Expense Form: New Expense ' id '</div>');
$('.nav-tabs li:nth-child(' id ') a').click();
});
Вот JSFiddle того, что у меня есть в настоящее время: Вкладки динамической формы начальной загрузки
Моя основная проблема с добавлением кода моей формы в мой JS-файл — это огромная длина кода и то, что в него включено. Могу ли я в любом случае достичь того, чего я пытаюсь достичь, без жесткого кодирования HTML-элементов в моем JS-файле?
РЕДАКТИРОВАТЬ Я только что заметил, что при создании вкладки со ссылкой «Добавить расходы» фактически указанная вкладка вообще не сохраняется. Мне нужно, чтобы это сохранялось на случай, если пользователь потеряет соединение / его телефон умрет, вкладка все равно будет там по возвращении.
Заранее спасибо!
Ответ №1:
здесь мы можем сначала скопировать форму по умолчанию, созданную ранее. Затем, когда каждый новый будет создан, мы можем перенести его. Я думаю, это то, что вы хотите.
var defaultValues = $('#expense_1>.card-body').html()
$('.addNew').click(function (e) {
e.preventDefault();
var id = $(".nav-tabs").children().length; //think about it ;)
var tabId = 'expense_' id;
$(this).closest('li').before('<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#expense_' id '">New Expense</a><span>x</span></li>');
$('.tab-content').append('<div class="tab-pane" id="' tabId '"><div class="card-header">Expense ' id '</div><div class="card-body">' defaultValues '</div></div>');
$('.nav-tabs li:nth-child(' id ') a').click();
});
Комментарии:
1. Это идеально, это именно то, что мне было нужно. Большое вам спасибо!
2. еще один вопрос: вы знаете, как бы я отсортировал вкладку, чтобы <span>x</span> был на самом деле на вкладке, а не на н овой строке? если я помещу его в тег <a> ($(this).closest (‘li’) …), затем я удалю только что созданную вкладку и создам новую, она автоматически увеличится, а не вернется к номеру после предыдущей вкладки, т. Е. удалит # 2, а затем добавит новую, станет # 3, а не # 2
3. На самом деле имеют простое управление. поместите значок закрытия в теги «a». А затем запустите две «родительские» функции вместо одной в удаленной части страницы.
$(this).parent().parent().remove();
. Чтобы он мог стереть нужную вещь.