OnChange проблема с select_tag с '/' и '.' символы в Rails - PullRequest
0 голосов
/ 04 октября 2009

У меня есть select_tag (rails), который загрузил выбранное значение с помощью '/' и '.' персонаж в нем.

onchange тега select перенаправляет страницу (используя window.location), используя объединенный URL со значением тега select.

Это то, что я пытался изолировать проблему.

  • Вызывает JavaScript-код оповещения для отображения объединенного значения.
  • Добавлен urlencode к переданному значению.
  • Жесткий код значения urlencode для windows.location (и чудесным образом он работает).

Заранее спасибо.

1 Ответ

2 голосов
/ 04 октября 2009

Сложно сказать без кода (или действительно с вопросом!), Но в целом, когда вы создаете 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 не сработает).

Выбор для навигации является дискредитированной техникой. Сегодня вы можете вместо этого попробовать всплывающее при нажатии <div>, полное простых ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...