2012-06-27 52 views
3

我創建了一個下面的html頁面。Onchange事件不太好

<html> 
    <head></head> 
    <body> 
     <input type="text" value="" id="Textbox" onchange="alert('text change');" /> 
     <input type="button" value="" onclick="document.getElementById('Textbox').value = 'Hello';" /> 
    </body> 
</html> 

當輸入的文本輸入到文本框中時,onchange事件運行良好。我寫了一個代碼,當點擊按鈕時,'Hello'文本被輸入到文本框中。但是文本框的onchange事件運行不正常。我如何捕捉變化事件?謝謝。

回答

3

以編程方式更改值不會觸發change event,只有在用戶關注元素,更改值並將焦點置於其他位置時纔會發生該操作。

選項是手動調用onchange元素上的onchange監聽器dispatch a change event,或者通過向上尋找具有onchange監聽器的父母並調用它們來手動冒泡更改事件。

這裏是一個似乎符合該法案的答案:trigger onchange event manually

一些鏈接:

  1. MDN dispatchEvent(符合標準):https://developer.mozilla.org/en/DOM/element.dispatchEvent
  2. MSDN fireEvent(IE專有):http://msdn.microsoft.com/en-us/library/ie/ms536423(v=vs.85).aspx
-1

當前根據你的代碼,當你離開文本框的事件工程,

你需要嘗試的OnKeyPress 這裏http://jsfiddle.net/EBMyy/

檢查,看到這個代碼

$(document).ready(function(){ 
    $("#Textbox").keypress(function(){ 
     alert("Text Changed"); 
    }); 
});​ 
+2

你的答案沒有提到問題,並且問題上沒有jQuery標記,所以提供jQuery特定答案是沒有用的。 OP表示,onchange listener對用戶輸入工作正常,它是問題的價值的程序化改變。 – RobG

+0

@RobG 是的,你是對的,:) – mfadel

+1

jquery不是web開發的默認js框架 – gonephishing

0

如果你想捕捉每一個變化使用keydown事件。如果我沒有記錯,onChange只會在輸入模糊後觸發。

0
function codeThatAltersTextFieldProgrammatically() { 
    /* ... code ... */ 

    textFieldChangeEventHandler(); 
}; 

function textFieldChangeEventHandler(){ 
    /* .... */ 
}