我正在使用DirtyForms并且插件的基本功能正在运行。当用户尝试离开页面时,浏览器会抛出确认对话框。
我们使用jQuery UI的Dialog进行模态确认,我试图让它与DirtyForms一起使用,DirtyForms有一个直接引用jQuery UI对话框的例子。我直接从他们的页面使用示例来设置自定义对话框,但它没有使用jQuery Dialog,它仍然使用浏览器的本机对话框:
$.DirtyForms.dialog = {
selector: '#unsavedChanges',
fire: function(message, dlgTitle) {
$('#unsavedChanges').dialog({title: dlgTitle, width: 350, modal: true});
$('#unsavedChanges').html(message);
},
bind: function() {
$('#unsavedChanges').dialog('option', 'buttons',
[
{
text: "Stay Here",
click: function(e) {
$.DirtyForms.choiceContinue = false;
$(this).dialog('close');
}
},
{
text: "Leave This Page",
click: function(e) {
$.DirtyForms.choiceContinue = true;
$(this).dialog('close');
}
}
]
).bind('dialogclose', function(e) {
// Execute the choice after the modal dialog closes
$.DirtyForms.choiceCommit(e);
});
},
refire: function(content) {
return false;
},
stash: function() {
return false;
}
}
打开插件的调试后,我没有收到任何错误(或任何其他JS错误),但模式对话框不会触发,只触发浏览器的本机错误。在同一页面上工作的其他实现的jQuery UI对话框。我不确定我在这里可能缺少什么。任何帮助或见解将不胜感激。
答案 0 :(得分:0)
最可能的问题是您的HTML标记中没有div
标记,标识为unsavedChanges
。所以,你应该添加HTML ...
<div id="unsavedChanges" style="display:none;" />
或JavaScript中的等价物......
var $dlg = $('<div id="unsavedChanges" style="display:none;" />');
$('body').append($dlg);
如果不是问题,我建议您修改问题以包含Minimal, Complete, and Verifiable Example,方法是发布整个HTML文档或使用JSFiddle等服务。
注意:自定义对话框仅在用户单击页面中的超链接时有效。当用户与浏览器的导航交互时,将显示浏览器的对话框(如果有)。这是因为无法使用自定义对话框覆盖浏览器的默认导航行为。
在版本2.x中,现在可以customize the event binding,因此如果点击它们,可以添加超链接以外的元素,导航离开当前页面。