Элемент не скрывается при перезагрузке страницы?
Я использую JQuery formset librairy для управления django inline formsets в моих формах. Я могу добавить новый набор форм с помощью кнопки 'add' и удалить набор форм с помощью кнопки 'delete' (django-inline-formet).
Но я добавил в свои формы функцию "блокировки/разблокировки", которая отключает все поля при нажатии на кнопку блокировки (id = lock).
Итак, когда форма "заблокирована", поля отключены и кнопки 'add' и 'delete' также должны быть скрыты. Мне удается показывать/скрывать кнопки при нажатии пользователем кнопки блокировки.
Но когда форма заблокирована и страница перезагружается пользователем (F5), кнопки 'add' и 'delete' отображаются. Похоже, что код в функции, выполняемой с document.ready, не срабатывает.
Но если я выполняю код "вручную", он работает.
Что я пропустил?
function disabled_field(action) {
$('#form').find(':input').not(':button,:hidden').each(function () {
if (action == 'locked') {
$(this).prop('disabled', true);
} else {
// only if user has write privilege on form
if ($('#is_locked').data('add-privileges') === 'True') {
$(this).prop('disabled', false);
}
}
});
}
//index of the last empty formset added with 'extra' inlineforsmet parameters
var index = formsetnumber() - 1;
/* lock a form */
$("body").on("click", '#lock', function (event) {
// form is locked => hide inlineformset buttons
if ($('#lock').attr('aria-pressed') == 'false') {
// hide all formset delete button
$(".visit-delete").each(function () { $(this).hide() });
// hide add-row button
$(".add-row").hide();
// hide the last empty formset added with 'extra' inlineforsmet parameters
$("#div_id_evenement_visite-" + index + "-vis_eve_num").closest(".row").hide();
} else {
// show all formset delete button
$(".visit-delete").each(function () { $(this).show() });
// show add-row button
$(".add-row").show();
// show the last empty formset added with 'extra' inlineforsmet parameters
$("#div_id_evenement_visite-" + index + "-vis_eve_num").closest(".row").show();
}
// when page is refreshed (F5) => currently, it dosen't works and add/delete buttons are displayed
$(document).ready(function () {
// form is locked => hide inlineformset buttons
if ($('#lock').attr('aria-pressed') == 'false') {
// hide all formset delete button
$(".visit-delete").each(function () { $(this).hide() });
// hide add-row button
$(".add-row").hide();
// hide the last empty formset added with 'extra' inlineforsmet parameters
$("#div_id_evenement_visite-" + index + "-vis_eve_num").closest(".row").hide();
} else {
// show all formset delete button
$(".visit-delete").each(function () { $(this).show() });
// show add-row button
$(".add-row").show();
// show the last empty formset added with 'extra' inlineforsmet parameters
$("#div_id_evenement_visite-" + index + "-vis_eve_num").closest(".row").show();
}
});
"Добавить" и "Удалить" динамически добавляются с помощью JS, используя либрари django-inline-formset, поэтому кнопки могут быть недоступны при загрузке/перезагрузке страницы. Вы должны "подождать", пока элементы будут загружены, прежде чем пытаться показать/скрыть. Код от Chris Jhoughton, который я обычно использую, когда сталкиваюсь с этой проблемой. Надеюсь, это поможет.