使用onkeypress时,window.location.href在Safari中不起作用

时间:2010-05-06 12:59:14

标签: asp.net javascript safari

我正在使用asp文本框和搜索按钮。在Safari中,如果单击搜索按钮,我将使用javascript window.location.href重定向到搜索结果页面。但奇怪的是,如果我在文本框中按回车键,相同的javascript将不会重定向到该页面。

使用alert函数我可以看到window.location.href具有正确的url,顶部的位置栏从搜索页面(default.aspx)更改为搜索结果url但是当我单击OK时警告框顶部的网址将恢复为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 个答案:

答案 0 :(得分:1)

在Safari中,只有按键导致将字符添加到HTML元素时才会触发“onkeypress”事件。当你在单行文本框中按Enter键时,我不确定这会激发。请参阅此行为的部分解释here

正如Tim Down所说,你可能想要onkeydown

答案 1 :(得分:1)

使用keydown代替keypress,您应该没问题。

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

答案 2 :(得分:1)

我有类似的问题 使用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>