sách gpt4 ai đã đi

jquery - jquery 元数据插件和 jquery 验证插件的主要烦恼

In lại 作者:行者123 更新时间:2023-12-01 00:53:00 32 4
mua khóa gpt4 Nike

我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。

我正在使用此功能。当验证查找这些规则时,它会对元素进行此调用:

$(element).metadata()[meta] 

TRONG meta 是存储这些规则的前缀。例如


meta 的值将设置为“validate”以获取这些属性。但这里有一个大问题!

以下是元数据插件将数据属性解析为 json 的操作:

var getObject = function(data) {
if(typeof data != "string") return data;
data = eval("(" + data + ")"); //oh no!!!!!
return data;
}

if ( settings.type == "html5" ) {
var object = {};
$( elem.attributes ).each(function() {
var name = this.nodeName;
if(name.match(/^data-/)) name = name.replace(/^data-/, '');
else return true;
object[name] = getObject(this.nodeValue);
});
}

所以最终发生的是元数据解析所有 data-* 属性并尝试评估内容!一旦包含不包含 json 的数据属性,就会破坏内容。

现在问题:

看起来元数据和验证都是“经过验证的”插件。这是使用人们所使用的元数据插件的已知副作用吗?

我通常不喜欢修改插件代码来满足我的项目需求,但这似乎我应该:

  • 修复元数据插件,使其不盲目评估内容,并且不使用 eval 或
  • 修复验证插件以使用 .data() 而不是元数据插件

此外,除了修改元数据插件之外,还有其他方法吗

赏金后编辑:我应该把这一点说得更清楚,我有兴趣对这可能是如何发生的进行一些讨论。如此严重的错误如何可能同时存在于规范验证插件和我见过的由 resig 编写的随处使用的插件中。

修复很简单,我已经应用了它(我选择修改验证插件以在定义“元”时使用 $.data) - 我在这里给出 150 分是关于为什么这仍然是一个问题的想法(或者也许不是!)

1 Câu trả lời

正如您所发现的,“错误”(使用 eval)在于元数据插件,而不是验证插件。

您链接到的元数据插件的版本实际上是一个 fork ; jQuery 团队有 official repo 。如果你看commit history ,你会发现自 2007 年以来就没有任何真正的代码更新。该插件一直是 officially deprecated自 2011 年 4 月起。

(John Resig 在 2008 年 7 月发表了关于 HTML5 data- attributes 的博客,并且在 1.4.3 中提供了对 jQuery 核心的支持,该支持在 October 2010 中发布。)

所以我想你的“这可能是如何发生的”问题的答案是,你不应该再使用该插件了:-)

(làm mới: "official" repo 现在位于“jQuery 基金会孤立项目”下。)

至于验证插件,除了一些 demosmeta选项,我在文档中找不到元数据插件的任何提及。正在进行添加 support for data- attributes 的工作和 deprecate the metadata plugin ,所以希望当下一个版本准备好时,元数据插件最终可以被放弃。

关于jquery - jquery 元数据插件和 jquery 验证插件的主要烦恼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11231524/

32 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com