2010-05-06 42 views
0

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

使用警报功能,我可以看到window.location.href具有正确的网址,顶部的位置栏从搜索页面(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有关,但它不起作用,除非我做错了。

回答

1

在Safari中,只有在按键结果将字符添加到HTML元素时,才会触发'onkeypress'事件。当您在单行文本框中按Enter键时,我不确定这会触发。看到这种行为here的部分解释。

正如Tim Down所说的,你可能想用onkeydown代替。

+0

我试着添唐氏建议,但它并没有在Safari上工作,也Chrome浏览器:
它使用的onkeyup当为我工作。 onkeypress在铬中工作。如果您在Tim Downs的回答中阅读了我的评论,它会使用警告框来解释我读取window.location.href,它是http:// localhost(换行符)http:// localhost:55897 /.../ Default.aspx BUT在顶部的url它读取正确的页面和搜索字符串? – insanepaul 2010-05-12 09:09:42

1

使用​​而不是keypress,你应该没问题。

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

我刚刚有机会尝试你的建议,但它不起作用,它不适用于铬。奇怪的是,当我在最后一行后面放一个警告框来查看url字符串是什么时... window.location.href =“Search.aspx?searchString =”+ searchText; alert(window.location.href); ...顶部的URL读取Search.aspx?searchString = doctor,但警告消息读取Default.aspx。 – insanepaul 2010-05-12 08:59:58

1

我有类似的问题。

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>