I have found an odd anomaly with HTML text boxes and JavaScript that I have narrowed down to being a html/javascript peculiarity and I\'m hoping someone can educate me on.
Your best bet is to put your code for handling the change in a function (say, handleTextChange
), and then call that function both from the change
event handler and when you make changes directly in your code.
HTML:
<input type="button" name="setValue" id="setValue" value="setValue" onClick="changeField('textinput', 'Updated')">
<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);
}
}
Off-topic A couple of off-topic comments:
onchange
, not onChange
. In HTML, it doesn't matter; in XHTML, it matters, and the reflected property on the element is always all lower-case, so... And it's easier to type. :-)The onchange event is not triggered by a programmatic change of the value of the textinput. You have to call the code you want to execute after you change the value yourself.
The onchange event on textboxes and textarea elements only fires when the element loses focus, and if its value is now other than its value when it got focus.
This is a very old thread and the answer can be found elsewhere, but I figured I'd post it here since I found it through my research.
The onChange call for an element can be invoked programmatically a few ways:
document.getElementById("elementID").onchange();
or
var element = document.getElementById('elementID');
var event = new Event('change');
element.dispatchEvent(event);
Onchange sdoesn't get called until the field loses focus/another editfield gets focus.
Why don't you create a custom function, like this:
function change( val ){
var el = document.getElementById( 'textinput' );
el.value = val;
alert( val );
}