【问题标题】:ASP.NET TextBox OnTextChanged Event not firedASP.NET TextBox OnTextChanged 事件未触发
【发布时间】:2015-07-24 05:36:21
【问题描述】:

我正在尝试添加搜索功能,当用户每次输入文本(逐个字母)时,网站都会向服务器发送请求以收集信息。为此,我需要我假设的 OnTextChanged 事件?我尝试使用它,但事件不会触发。

<asp:TextBox ID="futu_search" type="text" spellcheck="false" placeholder="Search" OnTextChanged="futu_search_TextChanged"  runat="server"></asp:TextBox>

还有我的代码:

protected void futu_search_TextChanged(object sender, EventArgs e)
{
       //I kept a break point here to see if it's fired
       //Send requests
}

你觉得哪里不对?你们有比“OnTextChanged 事件”更好的解决方案来获取每次按键和搜索框吗?

【问题讨论】:

  • 我认为 OnTextChanged 事件会在您失去焦点时触发,而不是在您键入时触发。

标签: javascript c# asp.net search textbox


【解决方案1】:

启用自动回发真..

<asp:TextBox AutoPostback="true" ID="futu_search" type="text" spellcheck="false" placeholder="Search" OnTextChanged="futu_search_TextChanged"  runat="server"></asp:TextBox>

如果您想在用户按键时触发事件,则必须使用 java 脚本 **onkeyup ** 事件

<asp:TextBox onkeyup ="return abc(event)" AutoPostback="true" ID="futu_search" type="text" spellcheck="false" placeholder="Search" OnTextChanged="futu_search_TextChanged"  runat="server"></asp:TextBox>


<script>
function abc(evt) {

         ..put here your logic
        }
</script>

【讨论】:

  • 如何使用 keypress 获取要用于搜索的文本?
  • 哦对不起,我的错误 onkeyup 事件是正确的。我更新了我的答案请检查....感谢 Find Bug @Rohit
  • 你仍然只有最后一个按键。没有输入字段的文本。
  • 你可以通过 $("#textboxid").val() ..@Rohit
  • 尝试右键单击文本框并粘贴。除非您在输入区域中按键盘上的键,否则 KeyUp 不会触发。
【解决方案2】:

我认为最好使用 ajaxjquery 来完成您要完成的工作,而不是 postback 每次按键。

请查看this LINK 了解更多详情和示例。

此外,OnTextChanged 事件会在您失去焦点而不是在您键入时触发,这似乎是您的要求。

来自CodeProject的回答:

TextChanged: "当文本框的内容在 发布到服务器。" AutoPostBack: "使用 AutoPostBack 属性来 指定是否自动回发到服务器 TextBox 控件失去焦点。按 ENTER 或 TAB 键 而在 TextBox 控件中是最常用的改变焦点的方式。”

示例代码

来源https://jqueryui.com/autocomplete/

<script>
  $(function() {
    var availableTags = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++",
      "Clojure",
      "COBOL",
      "ColdFusion",
      "Erlang",
      "Fortran",          
      "Scala",
      "Scheme"
    ];
    $( "#tags" ).autocomplete({
      source: availableTags
    });
  });
  </script>
</head>
<body>

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

重要提示:如果您仍打算使用按键,请阅读以下引用,

输入文本框的值,onKeyPress期间始终是值 改变之前。

Chrome 中的“退格”也不会触发。 Sample Fiddle

如果你仍然对 OnKeyPress 感兴趣,我建议你看看这个SO Question

This 是您想要做的,但问题是新旧更好的东西已经出现,例如 HTML 5。

注意:如果您使用右键单击 => 粘贴,则不会触发 KeyUp 事件。要检查这里是提琴手link

【讨论】:

  • 我也会试试这个。还有 OnKeyPress 事件吗?
  • 有一个 OnKeyPress 但恐怕这不是您可能正在寻找的内容
【解决方案3】:

首先,OnTextChanged 事件不会触发,因为它的AutoPostBack 属性默认为 false。所以要实现它,请将其值设置为 true。

并且OnTextChanged 事件只会在文本框焦点丢失时触发。所以在这种情况下,您可以使用 AJAX 来获取值。

为此,您可以使用onkeyup 在每个字符输入处获取 javascript 函数中的值。

【讨论】:

  • 有 OnKeyPress 事件吗?
  • 没有。但是存在 onkeypress 事件,这是一个 javascript 事件。 keypress 发生在更改之前,keyup 发生在更改之后。因此,在他的情况下,您可以使用 onkeyup 来获取值。
【解决方案4】:

您可以使用以下代码设置焦点:

ScriptManager sm = ScriptManager.GetCurrent(this);
sm.SetFocus(myTextBox);

要设置焦点并选择 a 的文本,您必须使用以下命令:

ScriptManager.RegisterStartupScript(this, this.GetType(), "selectAndFocus", "$get('" + myTextBox.ClientID + "').focus();$get('" + myTextBox.ClientID + "').select();", true);

【讨论】:

    【解决方案5】:

    在控制标签中包含 Autopost back 标签。 AutoPostback="true"

    <asp:TextBox AutoPostback="true" ID="txtcontrol"  OnTextChanged="txtcontrol_TextChanged"  runat="server"></asp:TextBox>
    

    【讨论】:

    • OnTextChanged 事件在您失去焦点时触发,而不是在您键入时触发。
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多