这是IE的HTML响应中的表单标记的副本:
<FORM method=post action=/Account/logon jQuery1314030136323="2">
注意表单元素中的jQuery1314 …属性.它始终设置为“2”,但属性的名称始终不同(jQuery ###########).由于每次都不同,我的审批测试失败了.我需要在html输出上运行一个正则表达式并用暴力删除param,找到一种方法使每次属性名称相同,或者完全删除.有任何想法吗?
我故意不用ASP.NET标记它,因为我真的认为这是特定于IE或JQuery.
解决方法
旧样式代码等待window.onunload从DOM标记解除绑定Javascript数据以防止内存泄漏. JQuery通过在属性中使用一个简单的数字(比如代码示例中的那个)来避免这种情况,然后在标签和数字的Javascript中保留一个hashmap(它称之为uuid).
奇怪的属性名称是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",