【问题标题】:Javascript problem with location.hreflocation.href 的 Javascript 问题
【发布时间】:2010-12-19 14:47:55
【问题描述】:

我有一个文本框,每当用户按下某个键时,都会检查用户是否按下了回车键。如果按下回车键,我想在文本框中添加所有信息并将用户转移到不同的 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,必须像 aspx 中的 HttpUtility.EncodeUrl。

【问题讨论】:

  • 会,onKeyPress="javascript:checkEnter(event);"有所作为?
  • 你能提醒(searchLink)看看有没有奇怪的字符吗?
  • 您应该避免在 HTML 标记中使用 JavaScript 属性。相反,您应该以编程方式将偶数附加到节点。

标签: javascript location href onkeypress


【解决方案1】:

我不确定您是否需要所有这些。以下 HTML 标记的正常内置行为完全符合您的要求,无需任何 JavaScript:

<form method="get" action="/Search/">
    <input type="text" name="Keywords">
</form>

但是,您的 UI 必须有某种方式来提交不涉及击键的表单,这一点很重要。这有两个原因:

  1. 正如 Jorn 指出的那样,密钥提交表单可能并不明显。
  2. 没有提交按钮可能会影响使用替代输入设备的用户的可用性。

由于以上原因,建议如下:

<form method="get" action="/Search/">
    <input type="text" name="Keywords">
    <input type="submit" value="Search or 'go' or whatever">
</form>

【讨论】:

    【解决方案2】:

    试试这个,我刚刚在本地测试过,它在我的机器上可以运行

    function transferUser(url) {
        window.location = url;
    }
    

    并且您将希望将构建 URL 的方式更改为以下内容

    var searchCriteria = 
        escape(document.getElementById('<%= searchBox.ClientID %>').value); 
    var searchLink = '/Search/?Keywords=' + searchCriteria
    

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多