编码字符中断IE8上的Knockout js数据绑定

时间:2015-07-29 22:49:13

标签: javascript internet-explorer knockout.js internet-explorer-8 javascript-databinding

我在IE8上遇到一个非常奇怪的问题(仅在低于8的IE版本上)。问题在于attr绑定,如果我把编码的电子邮件字符串(包含%26,%40等),页面将不会在文本字段中呈现数据绑定(在下面的情况下为'firstlast@domain.com'),相反,它将呈现为“mailto:first%26last%40domain.com”。

<a data-bind="    visible: Email.length > 0, text: 'firstlast@domain.com', attr:{ href: 'mailto:' +  'first%26last%40domain.com' }"></a>

奇怪的是,如果我使用非编码字符串

,渲染就好了
<a data-bind="    visible: Email.length > 0, text: 'firstlast@domain.com', attr:{ href: 'mailto:' +  'first&last@domain.com' }"></a>

这两种方式都适用于Firefox和Chrome以及更高版本的IE。

1 个答案:

答案 0 :(得分:1)

我通过它进行了调试,发现Knockout js正在使用DOM方法setAttribute()来设置href。根据W3School的文档,setAttribute()支持IE9和更新的浏览器,所以我认为这是导致奇怪结果的原因。

我还搜索了一下setAttribute(),其他人也遇到过类似的问题,请看下面的链接:

https://social.msdn.microsoft.com/Forums/ie/en-US/aa6bf9a5-0c0b-4a02-a115-c5b85783ca8c/javascript-modifying-href-changes-link-text-as-well-for-mailto-protocol?forum=iewebdevelopment