【问题标题】:OnChange problem with select_tag with '/' and '.' characters in Rails带有 '/' 和 '.' 的 select_tag 的 OnChange 问题Rails 中的字符
【发布时间】:2009-10-04 08:12:44
【问题描述】:

我有一个 select_tag (rails),它用“/”和“。”加载了一个选择值。里面的人物。

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

这些是我试图找出问题所在。

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

提前致谢。

【问题讨论】:

    标签: javascript ruby-on-rails html-select


    【解决方案1】:

    没有代码很难说(或者确实是一个实际的问题!),但一般来说,当您从文本值构建 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>
    

    但是,./ 都不是查询参数中的特殊字符,因此在这种情况下忘记对它们进行编码实际上不会导致问题。如果我们谈论的是 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 不会触发)。

    选择导航是一种名誉扫地的技术。今天,您可能会改为尝试点击弹出式&lt;div&gt;,其中包含简单的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2016-10-07
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2017-04-27
      相关资源
      最近更新 更多