为什么这个下拉列表的排序工作在Internet Explorer,而不是在Chrome
Why does this dropdown list for sorting work in Internet Explorer but not in Chrome?
我用JavaScript编写了一个下拉列表,用于对产品库存页面上的结果进行排序。在Internet Explorer中,排序工作得很好,浏览器可以完美地处理这个问题。但是在Chrome中,它每次都失败(你能相信吗,有些东西在IE中工作,但在Chrome中却不行?)
在IE中,当我使用Sort By选项时,URL看起来像这样:
MyExampleSite.com/Supplies/Products/12345/MyProduct/? = 0
然而,当我做排序选项在Chrome这里是什么URL看起来像:
MyExampleSite.com/Supplies/Products/12345/MyProduct/? , amp ;一个= 0
正如你所看到的,它在URL中添加了amp,如果我一直尝试排序,它就会每次添加一个额外的amp。
这是导致我的问题的JavaScript:
$("[name=a]").change(function () {
window.location = '@(this.Model.SortUri)' + '@(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a=' + this.value;
});
我的解决方案是添加Html.Raw
如下:
$("[name=a]").change(function () {
window.location = '@(this.Model.SortUri)' + '@Html.Raw(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a=' + this.value;
});
突然它在IE和Chrome中工作得很好。
我的问题是为什么Chrome这样做,而不是IE?
嗯,你需要确保你所有的东西都是正确编码的,我猜你没有。我们需要看到更多的你的页面来确定。IE可能会检测到你做错了,并试图为你修复它,而Chrome不会自动修复你的错误。
关于什么时候需要和不需要转义的规则变得相当复杂。它在一个HTML页面中,每个人都知道你需要逃避&在HTML页面中,但它在一个script标记中,所以您是否需要转义它?这取决于你是否在CDATA元素中也有脚本标签。
简单的解决方案是避免这样做。将想要切换到的URL作为数据标签放在[name=a]元素上,如下所示:
<sometag name='a' data-urlprefix='@(this.Model.SortUri)@(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a='>stuff</sometag>
然后在javascript中:
$("[name=a]").change(function () {
window.location.href = $(this).data('urlprefix')+encodeURIComponent(this.value);
});
这也有将服务器处理的东西移到HTML部分的好处,这样你就可以把javascript放在它自己的文件中,无论如何你都应该这样做。
- 请注意,如果还没有,您应该对
this.value
进行unlencoding,所以我已经这样做了。如果它已经编码,您可以安全地删除它。我也改变了窗口。Location到window. Location .href,因为window。location有时也会做一些奇怪的事情——在某些浏览器上编码,但在其他浏览器上不编码,等等。
您只需要将整个字符串作为Html的一部分。原始(在外部构建逻辑并直接在这里插入变量)
请查看这篇文章
为什么是Html。ASP中锚标记中的原始转义&号。Net MVC 4?
- jQuery表单验证适用于Mozilla和Internet Explorer,但不适用于Chrome或Safari
- 输入类型的图像在Internet Explorer中不起作用,但在Chrome和Firefox中起作用
- Javascript片段不适用于Chrome,但适用于Internet Explorer
- 提交按钮不会;不适用于Chrome或Firefox,但适用于Internet Explorer
- Chrome 和 Internet Explorer 无法离线工作,在 Firefox 上工作正常
- JS幻灯片适用于Firefox和chrome,但不适用于Internet Explorer
- 使用Chrome打开Internet Explorer / Firefox等窗口
- getElementsByClassName 在 Google Chrome 和 Internet Explorer 中
- JavaScript脚本适用于Firefox,Chrome,Safari,Internet Explorer< 9,但不
- Javascript 日期在 Internet Explorer 和 Chrome 之间有不同的结果
- 提交按钮不会出现在Firefox中,而是出现在Chrome和Internet Explorer上
- 我的XML文件没有被Google Chrome和Internet Explorer使用
- jquery在Chrome中平滑滚动,而不是在Internet Explorer中
- Cookie代码可在FireFox和Explorer中使用,但不能在Chrome中使用
- JavaScript警报在Firefox中正常工作,但在Chrome和Explorer中不正常
- 如何强制google chrome/firefox使用Internet explorer web浏览器控件
- 如何禁用剪切,复制和粘贴操作的密码框跨所有浏览器,即chrome和Internet Explorer
- 为什么这个下拉列表的排序工作在Internet Explorer,而不是在Chrome
- 如何隐藏地址栏在最新版本(Firefox, chrome和internet explorer)使用javascript窗
- Ajax和html事件在chrome, firefox和Internet Explorer