以编程方式更新时,不会调用HTML JavaScript onChange处理程序
我发现HTML文本框和JavaScript有一个奇怪的异常,我将其缩小为HTML/JavaScript特性,我希望有人能教我 我已经下载并实现了一个日历插件,它创建了一个带有日历的简单图层,并在选择时将所选日期传递回文本框 我想做的是在文本框更改时捕获(使用onchange),然后调用Ajax函数来更新数据库 问题是,onchange永远不会被调用。。。我已经能够用下面这个非常简单的代码来证明它。。。单击按钮时,它会更改值,该值将触发onchange并显示一个警报框以编程方式更新时,不会调用HTML JavaScript onChange处理程序,javascript,html,onchange,Javascript,Html,Onchange,我发现HTML文本框和JavaScript有一个奇怪的异常,我将其缩小为HTML/JavaScript特性,我希望有人能教我 我已经下载并实现了一个日历插件,它创建了一个带有日历的简单图层,并在选择时将所选日期传递回文本框 我想做的是在文本框更改时捕获(使用onchange),然后调用Ajax函数来更新数据库 问题是,onchange永远不会被调用。。。我已经能够用下面这个非常简单的代码来证明它。。。单击按钮时,它会更改值,该值将触发onchange并显示一个警报框 <input type
<input type="button" name="setValue" id="setValue" value="setValue" onClick="document.getElementById('textinput').value='Updated'">
<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)">
这是标准吗?有解决方法吗?为什么不创建一个自定义函数,如下所示:
function change( val ){
var el = document.getElementById( 'textinput' );
el.value = val;
alert( val );
}
onchange事件不是由textinput值的编程更改触发的。您必须在自己更改值后调用要执行的代码。一旦更改SDoE,在字段失去焦点之前不会被调用/另一个editfield获得焦点。您最好的办法是将处理更改的代码放入函数中(例如,
handleTextChange
),然后从change
事件处理程序和直接在代码中进行更改时调用该函数
HTML:
离题一些离题评论:
- 最好使用
,而不是onchange
。在HTML中,这并不重要;在XHTML中,它很重要,元素上的反射属性总是小写的,所以。。。而且打字更容易。:-)李>onchange
- 除非您有充分的理由不这样做,否则我建议在事后连接事件处理程序,而不是使用内联HTML属性。由于浏览器的差异,使用库、或最容易实现这一点,但当然,库可以做的任何事情,您都可以自己做,这可能需要更长的时间,并且接受的测试更少。:-)李>
document.getElementById("elementID").onchange();
或
@戈米:我对你现在删除的答案的第二个评论是不正确的。仅供参考。可能的副本
function changeField(id, value) {
var field = document.getElementById(id);
if (field) {
field.value = value;
handleFieldChange(field);
}
}
document.getElementById("elementID").onchange();
var element = document.getElementById('elementID');
var event = new Event('change');
element.dispatchEvent(event);