JS中onpropertychange与onchange事件的区别及onblur替代方案

作者:竹影时间:2026-10-25 08:07:07浏览:456

本文对比了JavaScript中onpropertychange与onchange事件的触发机制。onpropertychange在值改变时即时触发,支持键盘和JS操作;onchange需失去焦点且仅响应键盘输入。两者均不校验值是否实际变化。当上述事件无法满足需求时,可考虑使用onblur作为替代方案,但需注意其与onchange同时使用可能引发问题。

onpropertychange与onchange事件触发机制对比

onpropertychange事件在通过键盘修改文本框值或使用JavaScript代码赋值时会立即触发;而onchange事件仅在通过键盘修改值且元素失去焦点(onblur)后才触发,使用JavaScript直接修改值不会触发该事件。需要注意的是,这两个事件并不检查文本框的实际值是否发生了改变,只要执行了相应的修改操作,就可能触发事件。在某些情况下,如果上述两个事件无法满足具体需求,可以考虑仅使用onblur事件。


onblur与onchange同时使用的问题

此外需要特别注意,当onblur事件与onchange事件同时使用时,onblur可能会出现异常行为。具体表现详见后续内容。


测试页面示例如下:


测试页面代码示例

 <html> <head> <title>通过js改变文本框中的值后触发的事件:onpropertychange事件 </title> </head> <body> <div id="test1"> <b>测试onpropertychange事件和onchange事件一起用时: </b> <br> <font color="red">测试结果:onpropertychange事件在用键盘每改变一下文本框的值或用js改变其值便会触发一下,而onchange只有在用键盘改变其值,然后在失去焦点后才触 发,用js改变其值不触发 </font> <br> <input name="haha1" type="text" onpropertychange="alert('触发了onpropertychange事件!')" onchange="alert('触发了onchange事件!')" size="30" > <input name="testbutton1" value="通过js改变文本框中的值" type="button" onclick="document.getElementById('haha1').value='js改变文本框后的值'"> <br><br> <br> <div id="test2"> <b>测试只有onblur和onchange事件时: </b> <br> <font color="red">测试结果:onchange先触发,onblur后触发 </font> <br> <input name="haha2" type="text" onblur="alert('触发了onblur事件!')" onchange="alert('触发了onchange事件!')" size="30" > <input name="testbutton2" value="通过js改变文本框中的值" type="button" onclick="document.getElementById('haha2').value='js改变文本框后的值'"> <br> <div> <br><br> <br> <div id="test3"> <b>测试当onblur和onpropertychange事件一起用时: </b> <br> <font color="red">测试结果:onblur好象出了问题,只要用键盘在文本框中随便输入一个值,便会触发它。可能是onpropertychange把它惹毛了。。。^-^ </font> <br> <input name="haha3" type="text" onblur="alert('触发了onblur事件!')" onpropertychange="alert('触发了onpropertychange事件!')" size="30" > <input name="testbutton3" value="通过js改变文本框中的值" type="button" onclick="document.getElementById('haha3').value='js改变文本框后的值'"> <br> <div> <br><br> <br> <div id="test4"> <b>测试有onblur、onpropertychange事件和onchange事件一起用时: </b> <br> <font color="red">测试结果:onblur在和onpropertychange一起用时的问题仍然存在 </font> <br> <input name="haha4" type="text" onblur="alert('触发了onblur事件!')" onpropertychange="alert('触发了onpropertychange事件!')" onchange="alert('触发了 onchange事件!')" size="30" > <input name="testbutton4" value="通过js改变文本框中的值" type="button" onclick="document.getElementById('haha4').value='js改变文本框后的值'"> <br> <div> </body> </html> 

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

作者最新文章