js动态修改input的value,会阻碍onchange事件?

I_am_a_java_CaiNiao 2012-10-23 10:14:01
大家好,请看如下html,执行后,发现input的onchange事件未响应,原因是我在onpropertychange中,修改了input的value,修改value为何会影响到onchange?如何才能避免?求解,谢谢!

<html>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript">

function testChange() {
alert("changed");
}

function testPropertyChange(input) {
input.value = "aa"; // 这段话如果改为alert("aa"),则结果两个事件都能响应
}

</script>
...全文
759 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
多谢各位~
吉普赛的歌 社区高级成员 T9 2012-10-23
  • 打赏
  • 举报
回复
此外, onproperptychange只适用于IE, 你要考虑浏览器的兼容性的话, 就不要用了
笨笨熊三号 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
JScript code

<html>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript">
function ……
[/Quote]
+1
吉普赛的歌 社区高级成员 T9 2012-10-23
  • 打赏
  • 举报
回复

<html>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript">
function testChange() {
alert("changed");
}
var i=1;
function testPropertyChange(input) {
alert("第"+(i++)+"次进入");
if(i==10)
return;
input.value = "aa"; // 这段话如果改为alert("aa"),则结果两个事件都能响应
}
</script>

你把我改过的代码, 在IE里运行一次就明白了 —— 你原来的代码, 就是个死循环, 还执行什么onchange事件呀?

input.value = "aa"; 就相当于又激发了一次 onprpertychange 事件。

所以你呀, 就不要想着在这个事件里给它直接赋值了, 如果你一定要赋值, 那是不可能再激发什么onchange

因为onchange是焦点离开时才激发的。 而且是要有值的变化才行。

但你的onproperptychange事件里, 已把值指定死了, 还怎么变化?

两个问题:
1. 死循环!
2. 没有值的变化!
Go 旅城通票 2012-10-23
  • 打赏
  • 举报
回复
ie会内存溢出。。
onchange和blur差不多,不过是要内容不一样时才会调用onchange
onpropertychange是只要内容改变就触发,设置控件内容回导致循环调用onpropertychange导致内存溢出stack overflow at line 0

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧