3

我在 javascript 和 asp.net 中的 Enter 键有问题

我有一个这样的控件,它带有一个 textchanged 事件,它会进行查找,但我想在用户输入时控制它

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event)" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />

这就是为什么我创建了这个运行良好的 javascript 函数。因为它避免了在任何字符输入时的 Enter 回发

    function EnterEvent(e) {
        var keycode = (e.keyCode ? e.keyCode : e.which);
        if (keycode == 13) {
            return true;
        }
        else {
            return false
        }
    }

然后我想控制TextBox什么时候有内容,所以我把js改成这样。

    function EnterEvent(e, ctrl) {
        var keycode = (e.keyCode ? e.keyCode : e.which);
        if (keycode == 13) {
            return ctrl.value.length > 2;
        }
        else {
            return false
        }
    }

控制

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event, this)" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />

但什么也没有发生。每当我输入时,页面回发。

我还在加载页面后面的代码中添加了这个

            TextBox1.Attributes.Add("onkeypress", "EnterEvent(event, this);");
            TextBox1.Attributes.Add("onkeyup", "EnterEvent(event, this);");
            TextBox1.Attributes.Add("onkeydown", "EnterEvent(event, this);");

我的页面仍在按 Enter 键进行回发。这个想法是如果至少有 3 个字符,则停止 Enter 回发。有什么想法或其他方法吗?

> -----------------编辑--------------------

我在 EnterEvent 之前添加了这个函数

    $(function () {
        $(':text').bind('keydown', function (e) { 
            if (e.keyCode == 13) 
                e.preventDefault();
        });
    });

但它阻止了所有页面中的 Enter 。输入根本不起作用。

> -----------------编辑 2--------------------------------

嗯,我成功了!正如我在之前的评论中所说,我尝试像过去一样添加一个虚拟按钮控件,然后从文本框中传输事件并调用它的点击事件。它一点也不干净,但它有效,我很着急。谢谢大家的回答。如果有人仍然可以提供帮助,我将不胜感激。我将继续审查这个问题。谢谢。

    function EnterEvent(e, ctrl) {
        var keycode = (e.keyCode ? e.keyCode : e.which);
        if (keycode == 13 && ctrl.value.length > 2) {
            $('[id$=Button1]').click();
        }
        else {
            return false;
        }
    }

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event, this)" />
<asp:Button ID="Button1" runat="server" OnClick="TextBox1_TextChanged" style="visibility:hidden;width:0;"/>
4

3 回答 3

4

有类似的需要来防止输入按键(尽管在这种情况下我不需要考虑输入长度条件)并发现这解决了问题......如果你需要的话,比添加整个脚本块更简单要做的是由于有人在文本区域中按 Enter 键而停止表单回发。

<asp:TextBox ID="tb_Input" runat="server" onkeypress="return event.keyCode != 13;"></asp:TextBox>

以为我会分享这个,以防其他人只搜索这个功能。

于 2013-12-12T18:39:46.850 回答
2
<asp:TextBox ID="TextBox1" runat="server" onkeydown="return EnterEvent(event,this);" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />

function EnterEvent(e, ctrl) {
            var keycode = (e.keyCode ? e.keyCode : e.which);
            if (keycode == 13 && ctrl.value.length > 2) {
                return false;
            }
            else {
                return true;
            }
        }
于 2013-09-05T15:33:40.783 回答
2

尝试:

e.preventDefault();

停止 Enter 事件。

我建立了一个小提琴手:

http://jsfiddle.net/rblaettler/Y3b8F/5/

这是你想要做的吗?仅当您有超过 2 个字符时才会提交。

于 2013-09-05T15:28:49.500 回答