Части вашей страницы являются ядром функции поиска:
JavaScript:
function handleThis(formElm){
window.location="http://syndex.me/tagged/"+formElm.q.value+"";
return false;
}
HTML:
<form onsubmit="return handleThis(this)" >
<input type="text" name="q" value=""/>
</form>
Прослушиватель событий привязан к вашей форме, используя onsubmit="return handleThis(this)"
.
onsubmit
срабатывает, когда пользователь нажимает клавишу ввода или нажимает кнопку поиска.
- Внутри атрибута
onsubmit
(он же обработчик событий) вы замечаете return handleThis(this)
. Эта функция (которая определена на той же странице; смотрите в будущее) вызывается с ключевым словом this
в качестве первого аргумента. this
в контексте обработчика события ссылается на элемент-владелец слушателя события, в данном случае <form>
.
В handleThis(formElm)
вы замечаете "http://syndex.me/tagged/"+formElm.q.value
. formElm.q
относится к элементу ввода с именем q
внутри элемента формы. formElem.q.value
содержит значение входного элемента, который содержит ключевые слова для поиска. Только что созданный URL присваивается window.location
, что инициирует новый запрос к http://syndex.me/tagged/
search_terms .
После этой строки вы видите return false
. Внутри обработчика событий onsubmit
вы видели return handleThis(this)
. Возвращаемое значение handleThis
передается в обработчик события onsubmit
. Итак, утверждение равно onsubmit="return false"
. Это означает, что форма больше не отправляет себя.
- Атрибут action не определен . Как упоминалось ранее, это не нужно, потому что форма не отправлена из-за
return false
. При возникновении ошибки или если пользователь отключил JavaScript, форма отправляется на URL-адрес, как определено в action
. Поскольку атрибут action
не указан, вместо него используется текущий URL страницы, в данном случае http://syndex.me/
. Все именованные элементы формы добавляются в запрос, поэтому окончательный URL будет http://syndex.me/?q=
search_terms
Чтобы вернуться к вашему вопросу, <form action="/tagged"
method = "get"> `:
- Нет
onsubmit
обработчик событий.
- Поскольку обработчик
onsubmit
не указан, HTML-форма будет отправлена браузером (воображаемый обработчик onsubmit
будет равен return true
.
- URL-адрес action равен , определен как
/tagged
, что переводит в файл с именем «tagged» в каталоге ROOT вашего хозяйничать . В этом случае: http://syndex.me/tagged?q=
search_terms . (q=..
является результатом элемента ввода с именем q
).
Когда вы изменяете action
на /tagged/
вместо /tagged
, отправленная форма запросит следующую страницу: http://syndex.me/tagged/?q=
search_terms
Когда вы изменяете /tagged
на /search
, ваша форма отправляется на http://syndex.me/search?q=...
. Как видно из заголовков, это местоположение перенаправляется на http://syndex.me/search/...
.
Такое поведение, вероятно, достигается с помощью правила, определенного в .htaccess
:
RewriteEngine On
RewriteRule ^/search\?q=(.*)$ /search/$1 [L,R=301]
Понял?