Send eventon JSDOM click with JavaScript

I am trying to use JavaScript events to check an input flag in JSDOM.

<input type="checkbox" id="foo" />

But I can’t get him to test himself by sending an event to him:

var evt = document.createEvent("HTMLEvents");
evt.initEvent("click", false, true);
document.querySelector('#foo').dispatchEvent(evt)

However, it works when I use jQuery .trigger('click')

Why is this code not working in jsdom? I feel there is a little inconsistency in jsdom and probably some other browser that fixes jQuery.

+4
source share
2 answers

There is a browser dependency on how to trigger events manually in JavaScript.

Here is a demo .

Code:

document.getElementById("foo").value='500';
if (document.getElementById("foo").fireEvent) {
    document.getElementById("foo").fireEvent("onclick");
} else if (document.getElementById("foo").dispatchEvent) {
    var clickevent=document.createEvent("MouseEvents");
    clickevent.initEvent("click", true, true);
    document.getElementById("foo").dispatchEvent(clickevent);
}

Updated Fiddle

Updated code:

if (document.getElementById("foo").fireEvent) {
    document.getElementById('car-make').attachEvent('onchange', update);
    document.getElementById("foo").fireEvent("onchange");

} else if (document.getElementById("foo").dispatchEvent) {
    document.getElementById('foo').addEventListener('change', update, false);
    var clickevent=document.createEvent("MouseEvents");
    clickevent.initEvent("change", true, true);
    document.getElementById("foo").dispatchEvent(clickevent);
}
function update () {
    alert('changed');
}
0
source

From the specification :

, . INPUT, SELECT TEXTAREA. .

  • :
  • :
  • :

, click, :

, .

, change .

, Cancelable: No , .

0

Source: https://habr.com/ru/post/1523467/


All Articles