2009-10-04 25 views
0

我有一個select_tag(rails),它用'/'和'。'加載了一個選擇值。字符在裏面。帶有'/'和'。'的select_tag OnChange問​​題在Rails中的字符

選擇標記的onchange使用連接的url將選擇標記的值重定向到頁面(使用window.location)。

這些是我試圖隔離問題的東西。

  • 調用alert javascript來顯示連接的值。
  • 將urlencode添加到傳遞的值。
  • 硬編碼urlencode'd值到windows.location(奇蹟般地,它正在工作)。

在此先感謝。

回答

2

很難說沒有代碼(或者確實是一個真正的問題!),但是一般情況下,當您從文本值構建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 

然而,包括%2F往往是Apache和IIS的各種不起眼的麻煩和煩人的原因;這是最好的避免。

在任何情況下,選擇重定向頁面的標記都是壞消息,不應該真正使用。除了要求JS工作,他們不方便(沒有新標籤,書籤鏈接等),他們打破了鍵盤導航(因爲onchange立即被觸發,使得無法選擇另一個選項)和他們打破後退按鈕(因爲當你返回頁面時,表單值被記住,所以你不能再次轉向同一頁面,因爲onchange不會觸發)。

Select-for-navigation是一種不可信任的技術。今天,您可以改爲使用簡單鏈接彈出式彈出式菜單<div>

相關問題