Javascript手动触发.onchange()事件
我有一个输入字段,我想分配一个新值并触发一个.onchange()事件。我做了以下工作:Javascript手动触发.onchange()事件,javascript,input,onchange,Javascript,Input,Onchange,我有一个输入字段,我想分配一个新值并触发一个.onchange()事件。我做了以下工作: document.getElementById("range").value='500'; document.getElementById("range").onchange(); 其中range是我的输入Id。 我得到以下错误: Uncaught TypeError: Cannot read property 'target' of undefined 有没有办法定义“目标”? 谢谢尝试使用或disp
document.getElementById("range").value='500';
document.getElementById("range").onchange();
其中range是我的输入Id。
我得到以下错误:
Uncaught TypeError: Cannot read property 'target' of undefined
有没有办法定义“目标”?
谢谢尝试使用或dispatchEvent(取决于浏览器)引发事件:
document.getElementById("range").value='500';
if (document.getElementById("range").fireEvent) {
document.getElementById("range").fireEvent("onclick");
} else if (document.getElementById("range").dispatchEvent) {
var clickevent=document.createEvent("MouseEvents");
clickevent.initEvent("click", true, true);
document.getElementById("range").dispatchEvent(clickevent);
}
这似乎对我有效(见此)。您是否有其他可能是问题所在的代码?您是如何定义onchange处理程序的
您是否在onchange处理程序中调用e.target?我怀疑这可能就是问题所在。。。由于您是以编程方式进行更改,因此没有相应的窗口事件。来自:
有时需要创建一个
事件以编程方式。(这是
与运行事件不同
功能(触发)
这可以通过以下方式完成:
代码
一般来说,您的代码应该可以正常工作。不过,可能还有其他问题
- 你把这两条线放在哪里
- 是否确定具有
id在您 运行代码(例如,在 文件(准备就绪)范围
- 你确定吗
您只有一个id为的元素
页面上的
范围
- 您的
函数在做什么(可能是 在这里张贴有帮助吗onchange()
$('#range').change();
但正如我提到的,您的案例也应该可以正常工作:关于
目标的错误是因为事件处理程序中有代码试图读取与更改事件关联的事件
对象的目标
属性。您可以尝试传递一个伪事件来愚弄它:
var range= document.getElementById('range');
range.onchange({target: range});
或者,如果可以的话,将处理程序代码更改为使用this
而不是event.target
。除非您使用委托(从父对象捕获子对象上的更改事件,这对于更改事件来说很麻烦,因为IE不会“冒泡”它们),更改事件的目标始终是事件处理程序注册的元素,这使得event.target
冗余
如果事件处理程序使用的事件
属性多于目标
,则需要伪造更多属性,或者使用“真实”浏览器界面来分派事件。如果可能正在使用事件侦听器(addEventListener
,或IE中的attachEvent
),这也是必要的因为它们在directonchange
属性上不可见。这依赖于浏览器(fireEvent
适用于IE,dispatchEvent
适用于标准),在较旧或更模糊的浏览器上不可用。我认为fireEvent()
是IE唯一的功能。符合标准的浏览器使用dispatchEvent()
。我收到一个“未捕获的TypeError:Object”错误,没有方法“fireEvent”
$('#range').change();
var range= document.getElementById('range');
range.onchange({target: range});