我的页面中有一个弹出对话框,大约有20个字段。这20个字段可以修改,对对话框的任何更改都将更新到服务器。
只有在IE8中,当用户尝试清除字段并保存内容时,字段值才会设置为null
。
使用IE8的本机JSON.stringfy
函数序列化空DOM元素的值似乎返回了"null"
(字符串)而不是""
演示:http://jsfiddle.net/6VKzy/2/[在IE8中打开]
关于这个问题的更多细节来自博客,
IE8中启用了本地JSON支持,用户现在可以利用它用于序列化和将JScript值反序列化为JSON文本,反之亦然然而是IE8的原生JSON实现中的一个已知问题,其中如果用户尝试读取空DOM元素的值,并序列化与使用本机JSON相同,结果与用户不同序列化">时出现expect。
http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx
注意:这个问题是自己回答的。
修复方法是使用下面这样的审查程序函数返回""
而不是"null"
。
function(k, v) { return v === "" ? "" : v }
固定演示:http://jsfiddle.net/6VKzy/3/[在IE8中打开以验证修复]
更多细节和不同的方法在博客中修复,
这是IE8生产版本中的一个错误。这里的问题是在DOM中,使用特殊编码来表示缺失字符串值。尽管此特殊值与JScript文本"的编码,贯穿整个JScript实现时,该值被视为===到",除了JSON.stringify.中的具体案例
由于该特殊值仅源自对DOM对象的访问,一种变通方法是在每次访问DOM时都显式审查它们这可能会返回一个。
http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx