window.location.href не работает в Safari при использовании onkeypress - PullRequest
0 голосов
/ 06 мая 2010

Я использую текстовое поле asp и кнопку поиска. В Safari, если я нажимаю кнопку поиска, я перенаправляюсь на страницу результатов поиска, используя javascript window.location.href. Но, как ни странно, тот же самый javascript не будет перенаправлять на страницу, если я нажму return в текстовом поле.

Используя функцию оповещения, я вижу, что window.location.href имеет правильный URL-адрес, а строка местоположения вверху меняется со страницы поиска (default.aspx) на URL-адрес результатов поиска, однако, когда я нажимаю кнопку ОК для В окне оповещения URL-адрес вверху возвращается на страницу default.aspx. Работает на ie7 / 8 / firefox / chrome, но не на safari. Вот мой код JavaScript, CS и ASPX:

function submitSearchOnEnter(e) {

            var CodeForEnter = 13;
            var codeEnteredByUser;

            if (!e) var e = window.event;
            if (e.keyCode) codeEnteredByUser = e.keyCode;
            else if (e.which) codeEnteredByUser = e.which;

            if (codeEnteredByUser == CodeForEnter)
                RedirectToSearchPage();
        }

        function RedirectToSearchPage() {

            var searchText = $get('<%=txtHeaderSearch.ClientID%>').value

            if (searchText.length) {

                window.location.href = "Search.aspx?searchString=" + searchText;
            }
        }

protected void Page_Load(object sender, EventArgs e)
{
    txtHeaderSearch.Attributes.Add("onkeypress", "submitSearchOnEnter(event)");
}

<asp:Panel ID="pnlSearch" runat="server" DefaultButton="lnkSearch">
                <asp:TextBox ID="txtHeaderSearch" runat="server" CssClass="searchBox"></asp:TextBox>
                <asp:LinkButton ID="lnkSearch" OnClientClick="RedirectToSearchPage(); return false;"
                    CausesValidation="false" runat="server" CssClass="searchButton">
            SEARCH
                </asp:LinkButton>
            </asp:Panel>

Я пытался вернуть false; что не позволяет мне вводить какие-либо символы в поле поиска. Я провел целую вечность в Интернете, пытаясь найти решение. Может быть, это как-то связано с setTimeout или setTimeInterval, но это не сработало, если я не сделал это неправильно.

Ответы [ 3 ]

1 голос
/ 06 мая 2010

Используйте keydown вместо keypress, и все будет в порядке.

protected void Page_Load(object sender, EventArgs e)
{
    txtHeaderSearch.Attributes.Add("onkeydown", "submitSearchOnEnter(event)");
}
1 голос
/ 10 декабря 2010

У меня была похожая проблема.
У меня сработало при использовании onKeyUp:

function bodyOnKeyUp(event)
{
    if (!event) {event=window.event;}
    var Esc = 27;

    switch (event.keyCode) {
    case Esc:
        document.location.href='URL';
        break;
    }
}

<body onKeyUp="bodyOnKeyUp(event)">
...
</body>
1 голос
/ 06 мая 2010

В Safari событие onkeypress вызывается только в том случае, если нажатие клавиши приводит к добавлению символа в элемент HTML. Я не уверен, что это вообще сработает, когда вы нажмете Enter в однострочном текстовом поле. Смотрите частичное объяснение этого поведения здесь .

Как говорит Тим ​​Даун, вы, вероятно, хотите вместо этого onkeydown.

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