jquery - 为什么我的 FORM 元素有一个随机的 JQuery 属性?

标签 jquery html internet-explorer

我正在使用 Approval TestsWatiN测试我的 ASP.NET MVC2 页面的集成。 WatiN 启动 IE 以点击给定的 URL,然后在一个变量中给我浏览器的 html 响应。然后,批准测试允许我将 html 响应与 html 响应的“批准”版本进行比较。除了某些东西(IE 或 JQuery)正在向我的元素添加意外属性外,该系统运行良好。

这是来自 IE 的 html 响应的表单标签的副本:

<FORM method=post action=/Account/LogOn jQuery1314030136323="2">

注意表单元素中的 jQuery1314... 属性。它总是设置为“2”,但属性的名称总是不同的 (jQuery###########)。由于每次都不一样,我的批准测试失败了。我需要在 html 输出上运行正则表达式并用蛮力删除参数,找到一种方法使属性名称每次都相同,或者完全删除。有什么想法吗?

我故意 - 不 - 用 ASP.NET 标记它,因为我真的认为这是特定于 IE 或 JQuery 的。

最佳答案

这是 uuid/jQuery.expando,jQuery 添加到它与之交互的每个 DOM 元素,以解决浏览器内存泄漏问题。

旧式代码等待 window.onunload 解除 Javascript 数据与 DOM 标签的绑定(bind)以防止内存泄漏。 JQuery 通过在属性中使用一个简单的数字(如您的代码示例中的数字),然后在 Javascript 中保留标签和数字(称为 uuid)的 HashMap 来避免这种情况。

奇怪的属性名称是 jQuery.expando 的值,您可以在代码中轻松搜索并看到它每次都设置为随机值。这样做是为了允许多个 jQuery 副本在页面上共存而不会相互干扰。

我不知道我曾经需要在同一页面上需要多个 jQuery 的用例,而且我怀疑您也不需要此功能 - 您可以通过消除此功能轻松解决此问题特征。修改代码以将 jQuery.expando 设置为一些硬编码值,例如“jquery”,而不是随机数,这样就可以了。

注意不要在同一个页面中两次使用 jQuery!尽管不小心这样做也会引入许多其他奇怪的副作用(比如重用 $),所以这一点可能没有实际意义。

我在这个问题中更详细地介绍了 jQuery.expando/uuid: Why Doesn't JQuery Expose its UUID Functionality?

您会在那篇文章中注意到该属性的值是随机的 - 它是一个基于到目前为止 jQuery 已与多少标签交互的计数器。如果您的代码要求属性值保持一致,您可能仍然会遇到麻烦。

更新

您需要修改您的 jquery 源代码。例如1.6.2: http://code.jquery.com/jquery-1.6.2.js

包括以下内容:

jQuery.extend({
    cache: {},

    // Please use with caution
    uuid: 0,

    // Unique for each copy of jQuery on the page
    // Non-digits removed to match rinlinejQuery
    expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),

您可以按如下方式更改 expando 行:

    // Does not support multiple copies of jQuery on the same page!
    // 0 included to match rinlinejQuery (/jQuery\d+/)
    expando: "jQuery0",

关于jquery - 为什么我的 FORM 元素有一个随机的 JQuery 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150592/

相关文章:

jquery - 将焦点设置到动态加载的 DIV 中的字段

jQuery tmpl : How do I render Html?

javascript - jQuery 函数仅适用于一次 Html5 自动对焦

html - CSS:改变列表中元素符号的颜色?

css - 文本框中的光标对齐

JavaScript 滚动元素在 Chrome 中有效,但在 IE11 中无效

jquery - 无法在 JQuery 1.6.4 中使用 CORS 进行 PUT/POST/DELETE HTTP 调用

javascript - 我想通过选择类来获取数据并使用 jquery 在控制台中打印它

css - 当打开部署在服务器 tomcat 上的页面时,IE 无法响应屏幕,但在部署前使用 IE 在 eclipse 元素上运行时它工作正常

javascript - 删除表格 HTML 上的标签