重新加载页面时元素不隐藏?

Element not hide when page is reloaded?

我使用 JQuery 表单集库来管理表单中的 Django 内联表单集。 我可以使用 'add' 按钮添加新的表单集,并使用 'delete' 按钮(django-inline-formet)抑制表单集。

但是我在我的表单中添加了“lock/unlock”功能,当单击锁定按钮 (id = lock) 时禁用所有字段。

因此,当表单被“锁定”时,字段将被禁用,并且 'add' 和 'delete' 按钮也必须被隐藏。 我设法 show/hide 用户点击锁定按钮上的按钮。

但是,当表单被锁定并且用户重新加载页面 (F5) 时,会显示 'add' 和 'delete' 按钮。似乎用 document.ready 执行的函数中的代码不是 fire.

但是如果我 'manually execute' 代码就可以了。

我错过了什么?

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();    
    }
});

'add' 和 'delete' 是使用 django-inline-formset 库通过 JS 动态添加的,因此当页面为 loaded/reloaded 时按钮可能不可用。在尝试 show/hide 之前,您必须 'wait' 才能加载元素。 Code 来自 Chris Jhoughton 我通常在遇到这个问题时使用。希望对您有所帮助。