ASP.NET TextBox OnTextChanged未触发事件

时间:2015-05-13 05:15:54

标签: javascript c# asp.net search textbox

我正在尝试添加搜索功能,其中网站向服务器发送请求以在每次用户输入文本时逐字收集信息(逐字母)。为此,我需要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事件”更好的解决方案来获得每次按键和搜索框?

5 个答案:

答案 0 :(得分:3)

启用autopostback true ..

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

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

<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>

答案 1 :(得分:0)

我认为最好使用 ajax jquery 来完成你想要完成的工作,而不是每次按下回发

请查看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一样。

注意:如果您使用右键单击=&gt;,则不会触发使用on KeyUp事件粘贴。要查看此处是一个提琴手link

答案 2 :(得分:0)

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

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

为此,您可以使用onkeyup在每个有人值守的输入中获取javascript函数中的值。

答案 3 :(得分:0)

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

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

要设置焦点并选择您必须使用以下内容的文本:

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

答案 4 :(得分:-1)

在控制标记中包含Autopost返回标记。的的AutoPostBack = “真”

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