使用JavaScript在JSDOM上调度click Event

使用JavaScript在JSDOM上调度click Event,javascript,events,Javascript,Events,我试图使用JavaScript事件检查JSDOM中的输入复选框 <input type="checkbox" id="foo" /> 但是,当我使用jQuery的.trigger('click') 为什么这段代码不能在jsdom中工作?我觉得jsdom和jQuery修复的其他浏览器之间存在一些小的不一致性。在JavaScript中手动触发事件的方式上存在浏览器依赖性 代码: document.getElementById("foo").value='500'; if (docum

我试图使用JavaScript事件检查JSDOM中的输入复选框

<input type="checkbox" id="foo" />
但是,当我使用jQuery的
.trigger('click')


为什么这段代码不能在jsdom中工作?我觉得jsdom和jQuery修复的其他浏览器之间存在一些小的不一致性。

在JavaScript中手动触发事件的方式上存在浏览器依赖性

代码:

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);
}
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');
}

更新代码:

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);
}
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');
}
发件人:

当控件失去输入焦点且自获得焦点后其值已被修改时,会发生更改事件。此事件对INPUT、SELECT和TEXTAREA有效。元素

  • 泡泡:是的
  • 可取消:否
  • 上下文信息:无
请注意这与
单击事件有何不同,例如:

单击元素上的定点设备按钮时发生单击事件

因此,触发
更改
事件实际上不会更改输入值


粗略地说,
Cancelable:No
属性表示默认情况下不会发生任何事情。

我可以很好地分派单击事件,但是,我不能分派更改事件。您可以修改小提琴以发送更改事件吗?只需在一个位置将
单击
更改为
change
,在另一个位置将
onclick
更改为
onchange
,您就可以开始了。查看我更新的答案。在你更新的小提琴中,复选框仍然没有选中。需要哪个事件来选中该框?确定。如果您像我的第一把小提琴一样触发
单击
事件并收听我的第二把小提琴中的
change
事件,则复选框将被选中,并且还会触发
change
事件。