【问题标题】:How can I exclude controls from making form Dirty?如何排除控件使表单变脏?
【发布时间】:2023-04-03 18:24:02
【问题描述】:

我正在使用这个:$('form').dirtyForms(); from https://github.com/snikch/jquery.dirtyforms 来检查我的表单是否脏了。但是,在我的页面上,我有一些仅用于过滤的下拉列表(它们不应使我的表单“脏”)。现在,当我选择这些下拉列表中的任何一个时,它都会导致我的表单变脏。使用 jquery.dirtyforms(我阅读了他们的文档,但没有看到如何),如何通过类名排除选择器(下拉菜单、文本框等),以便它们不会将表单标记为脏。

我尝试了各种方法,例如为这些下拉列表/过滤器分配一个名为 ignoreDirty 的类,然后在我的 jquery 中我这样做了:

$('form').dirtyForms().ignoreClass('ignoreDirty');

这会产生一个错误,所以我一定是做错了什么。 注意我也尝试通过属性设置它:

$('form').dirtyForms({ ignoreClass : "ignoreDirty" });

但这仍然使我的表单对于类名仍为 ignoreDirty 的任何控件都很脏 请注意,这些过滤器会导致回发,但可以说我去我的表单并且没有进行任何更改。我开始点击这些过滤器,然后在他们回复的那一刻发生这种情况:

【问题讨论】:

  • 试试$('form').dirtyForms({ ignoreClass : "ignoreDirty" });
  • 我过去尝试过,但它仍然会导致我的表单变脏。我收到一个弹出窗口(回发后),表单已更改,我需要保存更改。
  • 似乎是库中的一个错误
  • 有什么方法可以忽略选择器吗?或者有什么办法可以解决这个问题,@Ejay - 您是否对此进行了测试并确认?
  • 是的,经过测试,它可以满足您的体验

标签: javascript jquery jquery-dirtyforms


【解决方案1】:

有人可以说,插件代码对我来说几乎没有意义 :D 但是为了让它快速忽略选择框,你可以用下面的替换它的onSelectionChange

原创功能

var onSelectionChange = function() {
    $(this).dirtyForms('setDirty');
}

新版本

var onSelectionChange = function () {

   //this is the new line. self explanatory
   if ($(this).hasClass($.DirtyForms.ignoreClass)) return;


   $(this).dirtyForms('setDirty');
}

在此之后,您应该依靠原始开发人员进行适当的修复。由于 cmets 中的空间,我只是将其发布为答案

【讨论】:

  • 这是在 jquery.dirtyforms js 文件中吗?
  • 是的,还请确保您的原始函数看起来像我包含的那个。我从你链接到的 github repo 下载了代码,但以防万一:D
  • 我认为这行不通,因为有一些下拉菜单我想让我的表单变脏。但是我的过滤器下拉菜单不应该使表单变脏...你明白我的意思吗?
  • 也许应该是if ($(this).hasClass("ignoreDirty")) return;,其中ignoreDirty是我们可以用来指定哪些控件不应该导致表单变脏的类?
  • 这不会忽略所有下拉菜单。具有忽略类的将被忽略。此外,当我使用 $.DirtyForms.ignoreClass="ignoreDirty" 设置 ignoreClass 时,此方法有效。
【解决方案2】:

这里似乎有 2 个不同的问题。

首先,您尝试将ignoreClass 设置为ignoredirtyignoredirty 是默认值,所以没有理由设置它。但是,如果您确实需要将其设置为其他内容,则可以使用以下语法:

$.DirtyForms.ignoreClass = 'my-ignore-class';

其次,在 1.0.0 版本中,ignoreClass 仅适用于超链接。在 1.1.0 版本中,此行为已被修改为与输入和选择元素一起使用。

在 1.2.0 版本中,您现在还可以将 ignoreClass 设置为父容器元素,以忽略来自其中任何元素的输入或点击。

【讨论】:

  • 我知道这是一个老问题,但如果有人在看这个(就像我一样),默认的忽略类是 'dirtyignore' 而不是 'ignoredirty'。也许这在过去四年中发生了变化。查看@NightOwl88 的页面link
猜你喜欢
  • 2017-11-14
  • 2023-03-15
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 2020-04-06
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多