Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “触发”;onchange";事件_Javascript_Triggers_Onchange - Fatal编程技术网

Javascript “触发”;onchange";事件

Javascript “触发”;onchange";事件,javascript,triggers,onchange,Javascript,Triggers,Onchange,“onchange”事件仅在用户输入某个值时触发。当我通过Javascript自动更改值时,为什么不能触发事件?还有别的选择吗 动画: <!DOCTYPE html> <html> <head> <script> document.addEventListener ("DOMContentLoaded", function () { var input = this.

“onchange”事件仅在用户输入某个值时触发。当我通过Javascript自动更改值时,为什么不能触发事件?还有别的选择吗

动画:

<!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和其他内容。最好方法是在调用所需函数的每个输入中添加一个更改侦听器,