重新加载页面时元素不隐藏?
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 我通常在遇到这个问题时使用。希望对您有所帮助。
我使用 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 我通常在遇到这个问题时使用。希望对您有所帮助。