Javascript “触发”;onchange";事件
“onchange”事件仅在用户输入某个值时触发。当我通过Javascript自动更改值时,为什么不能触发事件?还有别的选择吗 动画:Javascript “触发”;onchange";事件,javascript,triggers,onchange,Javascript,Triggers,Onchange,“onchange”事件仅在用户输入某个值时触发。当我通过Javascript自动更改值时,为什么不能触发事件?还有别的选择吗 动画: <!DOCTYPE html> <html> <head> <script> document.addEventListener ("DOMContentLoaded", function () { var input = this.
<!DOCTYPE html>
<html>
<head>
<script>
document.addEventListener ("DOMContentLoaded", function () {
var input = this.getElementsByTagName ("input")[0];
var div = this.getElementsByTagName ("div")[0];
var i = 0;
var seconds = 5;
div.innerHTML = "The following input should fire the event in " + seconds + " seconds";
var interval = window.setInterval (function () {
i ++;
if (i === seconds) {
window.clearInterval (interval);
input.value = "Another example";
div.innerHTML = "Nothing ! Now try change the value manually";
}
else {
div.innerHTML = "The following input should fire the event in " + (seconds - i) + " seconds";
}
}, 1000);
input.addEventListener ("change", function () {
alert ("It works !");
}, false);
}, false);
</script>
<style>
body {
padding: 10px;
}
div {
font-weight: bold;
margin-bottom: 10px;
}
input {
border: 1px solid black;
border-radius: 3px;
padding: 3px;
}
</style>
<title>Event</title>
</head>
<body>
<div></div>
<input type = "text" value = "Example" />
</body>
</html>
代码:
<!DOCTYPE html>
<html>
<head>
<script>
document.addEventListener ("DOMContentLoaded", function () {
var input = this.getElementsByTagName ("input")[0];
var div = this.getElementsByTagName ("div")[0];
var i = 0;
var seconds = 5;
div.innerHTML = "The following input should fire the event in " + seconds + " seconds";
var interval = window.setInterval (function () {
i ++;
if (i === seconds) {
window.clearInterval (interval);
input.value = "Another example";
div.innerHTML = "Nothing ! Now try change the value manually";
}
else {
div.innerHTML = "The following input should fire the event in " + (seconds - i) + " seconds";
}
}, 1000);
input.addEventListener ("change", function () {
alert ("It works !");
}, false);
}, false);
</script>
<style>
body {
padding: 10px;
}
div {
font-weight: bold;
margin-bottom: 10px;
}
input {
border: 1px solid black;
border-radius: 3px;
padding: 3px;
}
</style>
<title>Event</title>
</head>
<body>
<div></div>
<input type = "text" value = "Example" />
</body>
</html>
document.addEventListener(“DOMContentLoaded”,函数(){
var input=this.getElementsByTagName(“输入”)[0];
var div=this.getElementsByTagName(“div”)[0];
var i=0;
var秒=5;
div.innerHTML=“以下输入应在“+秒+”秒”内触发事件;
var interval=window.setInterval(函数(){
i++;
如果(i==秒){
window.clearInterval(间隔);
input.value=“另一个示例”;
div.innerHTML=“无!现在尝试手动更改值”;
}
否则{
div.innerHTML=“以下输入应在“+(秒-i)+”秒内触发事件”;
}
}, 1000);
input.addEventListener(“更改”,函数(){
警惕(“它起作用了!”);
},假);
},假);
身体{
填充:10px;
}
div{
字体大小:粗体;
边缘底部:10px;
}
输入{
边框:1px纯黑;
边界半径:3px;
填充:3倍;
}
事件
感谢大多数情况下,您不希望在使用代码更改值时触发事件。在这些情况下,您可以通过..在现代浏览器上触发合成事件 因此,在您的具体示例中:
input.value = "Another example";
var event = document.createEvent("UIEvents"); // See update below
event.initUIEvent("change", true, true); // See update below
input.dispatchEvent(event);
更新:因为,自上述内容编写以来,initUIEvent
已被构造函数替换,因此:
input.value = "Another example";
var event = new UIEvent("change", {
"view": window,
"bubbles": true,
"cancelable": true
});
input.dispatchEvent(event);
或者,您也可以直接调用绑定到
change
事件的任何函数,这通常是我要做的。但有时您希望使用实际事件(例如,在使用观察者模式时),并确保任何正在侦听更改的人都会收到通知。如果您正在以编程方式更改值,您已经知道何时会发生这种情况,也就是说,您不能调用自己的方法,(可能与从实际触发器事件处理程序调用的相同)当您更改值时
编辑:否则,如果您特别需要实际火灾发生,您也可以自己手动调度事件。Crowder的代码只给了我一个TypeError(没有足够的参数指向UIEvent.initUIEvent)。 将其更改为:
input.value = "Another example";
var event = document.createEvent("UIEvents");
event.initUIEvent("change", true, true, window, 1);
input.dispatchEvent(event);
请注意,
initUIEvent
已被弃用,并从Web标准中删除,如developer.mozilla.org/en-US/docs/Web/API/UIEvent/initUIEvent所述
除了不使用initUIEvent
之外,这是相同的:
input.value = 'Another example';
var event = new UIEvent('change', {
'view': window,
'bubbles': true,
'cancelable': true
});
input.dispatchEvent(event);
更改值后,您必须手动触发事件。请参阅以下问题:当您使用javascript更改输入值时,为什么不也触发某些事件?为什么要使用onchange?onchange用于用户输入,其余的您可以自己处理。请注意,
initUIEvent
已被弃用并从Web Standa中删除rds如前所述:我正在使用你的更新答案,它的工作方式很有魅力,但它会使我的应用程序太慢,这与jquery的触发器()的操作相同,速度很快。原因是什么?我如何提高性能?如果一个人填充了多个隐藏输入,是应该创建多个事件并全部触发,还是应该只创建一个事件并多次触发?@HassanBaig:这完全取决于你。同样,在使用代码更改输入时触发事件是不寻常的在你的例子中,隐藏输入无论如何都不会触发更改事件。因此,任何这样做的需要都将完全取决于你的代码,一对多决策也是如此。想象一下:你有1个函数更新5个输入,每个输入在更改时都必须调用不同的函数,一切都是动态的,因此你不知道ID和其他内容。最好方法是在调用所需函数的每个输入中添加一个更改侦听器,