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>

Однако важно, чтобы в вашем пользовательском интерфейсе был какой-то способ отправки формы, не требующий нажатия клавиш. Это по двум причинам:

  1. Как отметил Йорн, может быть не совсем очевидно, что ключ отправляет форму.
  2. Отсутствие кнопки отправки может нарушить удобство использования для пользователей, которые используют альтернативные устройства ввода.

По указанным выше причинам предлагается следующее:

<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
Другие вопросы по тегам