Javascript проблема с location.href
У меня есть текстовое поле, и всякий раз, когда пользователь нажимает клавишу, проверяется, нажал ли он клавишу ввода. Если нажата клавиша ввода, я хочу добавить всю информацию в текстовое поле и перенести пользователя на другой URL.
<script language="javascript" type="text/javascript">
function checkEnter(e){ //e is event object passed from function invocation
var characterCode;
if(e && e.which){ //if which property of event object is supported (NN4)
e = e;
characterCode = e.which; //character code is contained in NN4's which property
}
else{
e = event;
characterCode = e.keyCode; //character code is contained in IE's keyCode property
}
if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
var searchLink = '/Search/?Keywords=' + document.getElementById('<%= searchBox.ClientID %>').value;
transferUser(searchLink);
return false;
}
else{
return true;
}
}
function transferUser(url) {
window.location.href = url;
window.location.replace(url);
}
</script>
Search: <input name="ctl00$searchBox" type="text" id="ctl00_searchBox" class="header_line_search_box_textbox" onKeyPress="checkEnter(event);" />
Я перепробовал все возможные комбинации, но ничего не происходит. Сайт просто обновляется.
Мне также нужно каким-то образом преобразовать текст от пользователя в HTML-сейф, как HttpUtility.EncodeUrl в aspx.
2 ответа
Я не уверен, что вам нужно все это. Обычное встроенное поведение для следующей разметки HTML работает точно так, как вам нужно, без необходимости использования JavaScript:
<form method="get" action="/Search/">
<input type="text" name="Keywords">
</form>
Однако важно, чтобы в вашем пользовательском интерфейсе был какой-то способ отправки формы, не требующий нажатия клавиш. Это по двум причинам:
- Как отметил Йорн, может быть не совсем очевидно, что ключ отправляет форму.
- Отсутствие кнопки отправки может нарушить удобство использования для пользователей, которые используют альтернативные устройства ввода.
По указанным выше причинам предлагается следующее:
<form method="get" action="/Search/">
<input type="text" name="Keywords">
<input type="submit" value="Search or 'go' or whatever">
</form>
Попробуйте, я только что проверил это локально, он работает на моей машине
function transferUser(url) {
window.location = url;
}
И вы захотите изменить способ создания своего URL на следующий
var searchCriteria =
escape(document.getElementById('<%= searchBox.ClientID %>').value);
var searchLink = '/Search/?Keywords=' + searchCriteria