繁体   English   中英

select_tag带有'/'和'。的OnChange问​​题 Rails中的字符

[英]OnChange problem with select_tag with '/' and '.' characters in Rails

我有一个select_tag(rails),它用'/'和'。加载了选择值。 字符。

select标记的onchange使用连接的url和select标记的值重定向页面(使用window.location)。

这些是我试图解决问题的方法。

  • 调用警报javascript以显示串联的值。
  • 在传递的值中添加了urlencode。
  • 将urlencode的值硬编码到windows.location(奇迹般地,它正在工作)。

提前致谢。

不用代码就很难说(或者实际上是一个实际的问题!),但是一般来说,当您从文本值构建URL时,您应该在客户端调用encodeURIComponent,而不是尝试在服务器端对其进行编码。 例如。

<select id="foo">
    <option value="123./">123./</option>
    <option value="456./">456./</option>
</select>

<script type="text/javascript">
    document.getElementById('foo').onchange= function() {
        var v= this.value;
        location.href= 'http://www.example.com/thing?foo='+encodeURIComponent(v);
    };
</script>

但是,两者都没有. nor /是查询参数中的特殊字符,因此在这种情况下忘记对它们进行编码实际上不会造成问题。 如果我们谈论的是URL的路径部分,那么/ 特殊的,必须进行编码:

location.href= 'http://www.example.com/things/'+encodeURIComponent(v)+'/view';

http://www.example.com/things/123.%2F/view

但是,由于各种晦涩和令人讨厌的原因,在Apache和IIS中将%2F包含在路径中往往很麻烦。 最好避免。

在任何情况下,重定向页面的选择标签都是个坏消息,不应真正使用。 除了要求JS完全工作之外,它们还很不方便(没有打开新标签页,书签链接等),而且破坏了键盘导航(因为onchange被立即触发,因此无法选择其他选项)和它们破坏了后退按钮(因为当您返回页面时,将记住表单值,因此您将无法再次切换到同一页面,因为onchange不会触发)。

导航选择是一种信誉不良的技术。 今天,您可以改为尝试使用一个包含简单链接的<div>弹出窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM