2011-04-26 34 views
5

Tôi có một hộp điều khiển máy chủ asp.net. Tôi đang sửa đổi giá trị của textbox từ javascript tôi muốn phát hiện khi văn bản textbox được thay đổi. Tôi đã thử sự kiện onchange mà được gọi là trên foucs bị mất khi văn bản thay đổi. Nhưng trong trường hợp của tôi, tôi là một văn bản thay đổi từ Javascript. Làm thế nào tôi có thể đạt được điều này?Cách phát hiện sự kiện thay đổi hộp văn bản từ javascript

Trả lời

6

Cập nhật thuộc tính valuesẽ không kích hoạt sự kiện thay đổi. Sự kiện thay đổi được kích hoạt bởi người dùng.

Bạn có thể viết một hàm làm thay đổi giá trị và làm bất cứ điều gì khác mà bạn cần phải làm gì ...

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

... hoặc thăm dò ý kiến ​​giá trị 's 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); 
})(); 

... hoặc tự gọi chính sự kiện onchange().

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

(Giả sử bạn thiết lập sự kiện này với onchange tài sản.)

Các cách giải quyết không phải là khủng khiếp giải pháp tuyệt vời. Dù bằng cách nào, bạn cần phải thực hiện một số can thiệp để kích hoạt mã phụ khi cập nhật thuộc tính value của textarea.

+0

bạn chắc chắn nhất có thể làm được điều này ... xem dưới đây. –

+2

@Cos Đó là với jQuery, trong đó OP không bao giờ được đề cập. Bạn cũng gọi một cách rõ ràng 'change()', về cơ bản những gì tôi đã gợi ý trong câu trả lời của tôi. – alex

+0

@Alex jquery là javascript (hay đúng hơn là một tập hợp javascript) và chứng minh rằng việc gọi '.change()' sẽ thực hiện mục tiêu mà OP đặt ra là hướng dẫn tốt hơn rằng "làm bất cứ điều gì khác bạn cần làm" –

-1

Nếu bạn có thể sử dụng jQuery, nó sẽ là một cái gì đó như thế này

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

Bạn có thể buộc một postback từ javascript và do đó buộc một sự kiện tải lại trang. Trong Page.GetPostBackEventReference(), bạn có thể xử lý sự kiện và có thể kích hoạt một số sự kiện khác.

Đây không phải là một giải pháp thougth tốt và tôi thực sự khuyên bạn nên làm điều đó tất cả thru javascript hoặc thả javascript và để cho tất cả mọi thứ NET hadle, có lẽ với Ajax.NET

sau đây link giải thích hwo bạn làm điều đó cho một nút bình thường, nhưng nó không phải là khó để làm cho nó cho một sự kiện onchange.

0

Sử dụng JQuery bạn có thể gán một handler 'thay đổi' và gọi xử lý như thế này:

<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

Tại sao bạn không chuyển trực tiếp 'DetectChange' sang phương thức' click() '? – alex

+1

@Alex OP tiểu bang 'Nhưng trong trường hợp của tôi là một văn bản thay đổi từ Javascript' vì vậy tôi đã sử dụng sự kiện nhấp chuột của nút để mô phỏng yếu tố đó của kịch bản. Tôi không biết 'những gì' javascript OP sử dụng hoặc làm thế nào nó được gọi nên tôi chỉ ginned lên bản demo mà sẽ làm điều gì đó tương tự. Bạn đúng rằng '.change' có thể được gọi từ nhấp chuột và nếu đáp ứng nhu cầu của OP thì tuyệt vời. –

Các vấn đề liên quan