Элемент не скрывается при перезагрузке страницы?

Я использую 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, который я обычно использую, когда сталкиваюсь с этой проблемой. Надеюсь, это поможет.

Вернуться на верх