编码的字符中断了 IE8 上的 Knockout js 数据绑定
Encoded character breaks Knockout js data bind on IE8
我在 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 上都可以正常工作。
调试了一下,发现Knockout js是用DOM方法setAttribute()设置href的。根据 W3School 的文档,setAttribute() 支持浏览器 IE9 和更新版本,所以我认为这就是导致奇怪结果的原因。
我也搜索了一下setAttribute(),其他人也遇到了类似的问题,见下面link:
我在 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 上都可以正常工作。
调试了一下,发现Knockout js是用DOM方法setAttribute()设置href的。根据 W3School 的文档,setAttribute() 支持浏览器 IE9 和更新版本,所以我认为这就是导致奇怪结果的原因。
我也搜索了一下setAttribute(),其他人也遇到了类似的问题,见下面link: