2011-04-26 49 views
5

我有一個文本框asp.net服務器控件。我正在修改JavaScript的文本框的值,我想要檢測文本框文本何時更改。我嘗試了onchange事件,當文本改變時它會被丟失。但在我的情況下,我從Javascript中更改文本。我怎麼能做到這一點?如何從javascript中檢測文本框更改事件

回答

6

更新value屬性不會觸發更改事件。更改事件由用戶觸發。

你可以寫從而改變價值和做你需要做其他的功能......

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

...或輪詢textarea的價值...

(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財產。)

的解決方法是不是非常偉大的解決方案。無論哪種方式,當更新textareavalue屬性時,您都需要進行一些干預以觸發額外的代碼。

+0

你肯定能做到這一點...見下文。 – 2011-04-26 07:22:21

+2

@Cos這是jQuery,其中OP從未提及過。你也明確地調用'change()',這基本上是我在我的答案中提出的。 – alex 2011-04-26 07:23:27

+0

@Alex jquery是javascript(或更確切地說是一個javascript集合),並且證明調用'.change()'將實現OP提出的目標是更好的指導,可以「做任何你需要做的事情」 – 2011-04-26 10:34:04

-1

如果你可以使用jQuery,它會是這樣的

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

你可以強制回傳從JavaScript,因此強制頁面重新加載事件。在Page.GetPostBackEventReference()中,您可以處理事件並可能觸發其他事件。

這不是一個很好的解決方案和吼聲我真的建議你做的這一切直通JavaScript或下降的JavaScript,讓.NET hadle一切,或許與Ajax.NET

以下link說明你做藿對於一個普通的按鈕,但它不應該很難做出onchange事件。

0

使用jQuery你可以指定一個「變」處理程序,並調用處理程序是這樣的:

<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()'方法? – alex 2011-04-26 10:53:34

+1

@Alex OP陳述'但在我的情況下,我從Javascript中更改文本,所以我使用按鈕的單擊事件來模擬該場景的元素。我不知道'OP'使用的是什麼,或者它是如何調用的,所以我只是簡單地做了一些類似的演示。你是正確的,'.change'可以通過點擊調用,如果這符合OP的需求,那麼很好。 – 2011-04-26 11:24:52