打开和关闭模式后,Dirtyforms 停止工作

Posted

技术标签:

【中文标题】打开和关闭模式后,Dirtyforms 停止工作【英文标题】:Dirtyforms stop working after I open and close a modal 【发布时间】:2017-05-23 14:13:14 【问题描述】:

我有一个表单,我想警告用户保存他们的数据。它是用 Dirtyforms 完成的。

我的表单中有一个按钮,它会打开一个带有一些额外表单的模式对话框。所以, 1. 我打开我的表单对话框 2. 在对话框中编辑(或不编辑)我的新表单 3. 关闭对话框 4. 返回我的第一个表单并点击离开。脏表格不会警告我丢失数据。

我在调试模式下检查了它,我在控制台中看到了这个:

[DirtyForms] Adding form w0 to forms to watch
[DirtyForms] Storing original value for _csrf
[DirtyForms] Storing original value for Prenajom[r1]
[DirtyForms] Entering: Leaving Event fired, type: click, element: http://k.local/..., class: btn btn-default popup-addon-table and id:
[DirtyForms] Leaving: Not dirty
[DirtyForms] Clearing the beforeunload event

在打开模式时,它会触发离开事件。 如何预防?

谢谢!

【问题讨论】:

【参考方案1】:

默认情况下,所有锚标记 (<a>) 都会附加一个触发对话框的事件,因为没有合理的方法来区分离开页面的锚和不离开页面的锚。如果您有无法离开的锚标记,您应该ignore them,这样它们就不会触发对话框。

选项 1

设置 ignoreSelector 选项以忽略特定字段、锚点或按钮。

$('form').dirtyForms( ignoreSelector: 'a.ignore-me' );

选项 2

或者,将$.DirtyForms.ignoreClass 的值添加到您希望忽略的任何元素中,Dirty Forms 将忽略它们。

$('#ignored-element').addClass($.DirtyForms.ignoreClass);

选项 3

如果您想一次忽略多个元素,可以将$.DirtyForms.ignoreClass 的值(默认值dirtyignore)添加到包含元素。

<div class="dirtyignore">

    <!-- Everything here will be ignored - anchor, input, textarea, and select -->

</div>

【讨论】:

NightOwl888,感谢您的帮助。我已经尝试过这些方法,但对我没有任何作用。选项 1 什么都不做,在尝试了选项 #3 之后,我在控制台中得到了这个:'输入:Leaving 事件被触发,类型:单击,元素:[object htmlElement],类:glyphicon glyphicon-list 和 id:[DirtyForms]离开:元素具有忽略类或被忽略元素的后代 [DirtyForms] 清除 beforeunload 事件。因此,DF 知道要忽略什么,但也清除了 beforeunload 事件,并且在我关闭模式后它不会警告更改。【参考方案2】:

我收到了来自@NightOwl888 的答复,解决了我的问题:

“您的设置有一个问题是,如文档中所述,Dirty Forms 应该始终是堆栈中的最后一个 jQuery 插件。如果您在初始化 Dirty Forms 后将事件附加到按钮,则可能无法正确忽略。”

【讨论】:

以上是关于打开和关闭模式后,Dirtyforms 停止工作的主要内容,如果未能解决你的问题,请参考以下文章

如何停止移动硬盘?

W7系统更新到IE11后,每次关闭网页后都弹出“Internet Explore停止工作”(如图)求解决方法?

解决3D Max2014关闭程序,打开后停止工作

几次点击后引导模式停止

开关一次后按钮停止工作

cdr显示出现一个问题,导致程序停止工作,怎么解决