2010-10-28 62 views
4

我發現一個奇怪的HTML文本框和JavaScript異常,我已經縮小到了html/javascript的特性,我希望有人可以教育我。當程序更新時,HTML JavaScript onChange處理程序不會被調用

我已經下載並實現了一個日曆插件,該插件創建一個包含日曆和選區的簡單圖層,並將選定的日期傳遞迴文本框。

我想要做的就是當文本框的變化(電平變化使用),然後調用一個Ajax功能來更新數據庫...

的問題是,平變化不會被調用,我還抓能夠與下面......這非常簡單的代碼來證明這一點。當按鈕被點擊它改變了值,那麼應該觸發的onchange,並顯示一個警告框...

<input type="button" name="setValue" id="setValue" value="setValue" onClick="document.getElementById('textinput').value='Updated'">&nbsp; 
<input type="button" name="clearValue" id="clearValue" value="clearValue" onClick="document.getElementById('textinput').value=''"><br> 
<input type="text" name="textinput" id="textinput" onChange="alert(this.name)"> 

這是標準?有沒有解決方法?

+0

@Ghommey:我對你現在刪除的答案的第二條評論是錯誤的。只是FYI。 – 2010-10-28 08:44:17

+0

可能重複的[Onchange輸入事件不是在jQuery上觸發](http://stackoverflow.com/questions/9805215/onchange-input-event-isnt-fired-on-jquery) – 2013-03-13 15:55:37

回答

0

你爲什麼不創建一個自定義功能,如:

function change(val){ 
    var el = document.getElementById('textinput'); 
    el.value = val; 
    alert(val); 
} 
3

onChange事件不是由值的綱領性變化觸發的文本輸入。您必須在您自己更改值後調用要執行的代碼。

0

Onchange不會被調用,直到該領域失去焦點/另一個editfield獲得焦點。

0

最好的辦法是把你的代碼來處理的功能(比如,handleTextChange)的變化,然後調用該函數change事件處理當您在代碼中直接更改。

HTML:

<input type="button" name="setValue" id="setValue" value="setValue" onClick="changeField('textinput', 'Updated')">&nbsp; 
<input type="button" name="clearValue" id="clearValue" value="clearValue" onClick="changeField('textinput', '')"><br> 
<input type="text" name="textinput" id="textinput" onChange="handleFieldChange(this)"> 

的JavaScript:

function changeField(id, value) { 
    var field = document.getElementById(id); 
    if (field) { 
     field.value = value; 
     handleFieldChange(field); 
    } 
} 

題外話一對夫婦的題外話評論:

  • 也許最好使用onchange,而不是onChange。在HTML中,沒關係;在XHTML中,它很重要,並且元素上的反射屬性始終爲,總是全部小寫,因此...更容易輸入。 :-)
  • 除非你有充分的理由不這麼做,否則我建議在事後處理事件處理程序,而不是內聯HTML屬性。由於瀏覽器的不同,這很容易通過庫jQuery,Closure,Prototype,,YUIany of several others來完成,但是當然庫可以做的任何事情都可以做,您可以自己做,它可能需要更長時間並且接受更少的測試。:-)
2

textboxes和textarea元素上的onchange事件僅在元素失去焦點時觸發,並且當元素失去焦點時它的值現在不是焦點時的值。

相關問題