Как обнаружить событие изменения текстового поля из javascript

#javascript #asp.net

#javascript #asp.net

Вопрос:

У меня есть текстовое поле asp.net управление сервером. Я изменяю значение текстового поля из javascript, я хочу определить, когда текст текстового поля изменяется. Я попробовал событие onchange, которое вызывается при потере foucs при изменении текста. Но в моем случае я изменяю текст из Javascript. как я могу этого добиться?

Ответ №1:

Обновление value свойства не вызовет событие изменения. Событие изменения инициируется пользователем.

Вы можете либо написать функцию, которая изменяет значение и делает все остальное, что вам нужно сделать…

 function changeTextarea(str) {
   document.getElementById('a').value = str;
   // Whatever else you need to do.
}
  

…или опросить textarea значение ‘s…

 (function() {
   var text = getText();   
   var getText = function() {
      return document.getElementById('a').value;
   }  

   setInterval(function() {
      var newtext = getText();
      if (text !== newText) {
          // The value has changed.
      }
      text = newText; 
   }, 100);
})();
  

…или явно вызовите onchange() событие самостоятельно.

 document.getElementById('a').onchange();
  

(Предполагая, что вы настроили событие с onchange свойством.)

Обходные пути не являются очень хорошими решениями. В любом случае, вам необходимо выполнить некоторое вмешательство, чтобы запустить дополнительный код при обновлении textarea value свойства.

Комментарии:

1. @Потому что это с помощью jQuery, о котором OP никогда не упоминал. Вы также явно вызываете change() , что в основном и есть то, что я предложил в своем ответе.

2. @Потому что jQuery написан на JavaScript? Действительно?

3. 1 за то, что не просто даешь ответ на jQuery. В любом случае, я думал, что jQuery был написан с использованием unicorn dust и pixie cake. Каждый день узнаешь что-то новое.

4. @Alex. Я хочу сказать, что если OP уже использует javascript, нет никаких препятствий для включения и использования jquery. Это, конечно, в ответ на ваш комментарий о том, что OP никогда не упоминает jQuery, как будто между javascript и jquery существует огромная пропасть. Я нахожу интересным, что вы так значительно расширили свой первоначальный ответ с «Вы не можете … если только …» до полезного ответа. Теперь у OP есть несколько вариантов решения.

5. @ Потому что я только что прояснил моменты в своем ответе. Добавление jQuery тривиально для реализации, но есть веские причины, покоторым кто-то может не захотеть.

Ответ №2:

Вы могли бы принудительно выполнить обратную отправку из javascript и, следовательно, вызвать событие перезагрузки страницы. На странице.GetPostBackEventReference() вы можете обработать событие и, возможно, запустить какое-либо другое событие.

Это не очень хорошее решение, и я искренне рекомендую вам делать все это через javascript или отбросить javascript и разрешить .В СЕТИ было все, возможно, с Ajax.NET

Следующая ссылка объясняет, как вы делаете это для обычной кнопки, но это не должно быть сложно сделать для события onchange.

Ответ №3:

Используя Jquery, вы можете назначить обработчик ‘change’ и вызвать обработчик следующим образом:

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            //makes 'DetectChange' the handler when TextBox1 changes...
            $('#TextBox1').change(function () {
                DetectChange();
            });
         });

        function DetectChange() {
            alert("TextBox1 has been changed");
        }

        function ClickTheButton() {
            // .val actually 'changes the value'
            // while you have to add .change() to invoke the actual change event handler...
            $('#TextBox1').val("Changed When Button Clicked").change();

            //return false prevents the click event of the button from doing a post back
            //keeping everything on the client for this sample..
            return false;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <input id="Button1" type="button" value="Change TextBox1" onclick="return ClickTheButton();"  />
    </div>
    </form>
</body>
</html>
  

Комментарии:

1. Почему бы вам напрямую не перейти DetectChange к click() методу?

2. @Alex OP утверждает But in my case i an changing text from Javascript поэтому я использовал событие нажатия кнопки для имитации этого элемента сценария. Я не знаю, «что» использует javascript OP или как он вызывается, поэтому я просто создал демо, которое делало бы что-то подобное. Вы правы, что .change может быть вызвано щелчком мыши, и если это соответствует потребностям OP, тогда отлично.

Ответ №4:

Если бы вы могли использовать jQuery, это было бы что-то вроде этого

 $('#id_of_text_area').change(function(){
    //do something
});