0

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

4

2 回答 2

3

我不确定你是否需要所有这些。以下 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>
于 2009-11-23T20:16:48.870 回答
2

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

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

您需要将构建 URL 的方式更改为以下内容

var searchCriteria = 
    escape(document.getElementById('<%= searchBox.ClientID %>').value); 
var searchLink = '/Search/?Keywords=' + searchCriteria
于 2009-11-23T19:37:32.243 回答