代码之家  ›  专栏  ›  技术社区  ›  Mircea

Javascript手动触发.onchange()事件

  •  5
  • Mircea  · 技术社区  · 15 年前

    我有一个输入字段,我想分配一个新值并触发一个.onchange()事件。我做了以下工作:

    document.getElementById("range").value='500';
    document.getElementById("range").onchange();
    

    其中range是我的输入Id。 我得到以下错误:

    Uncaught TypeError: Cannot read property 'target' of undefined
    

    谢谢你

    5 回复  |  直到 15 年前
        1
  •  8
  •   bobince    15 年前

    关于的错误 target 是因为事件处理程序中有代码试图读取 目标 Event 与更改事件关联的对象。你可以试着通过一个假事件来愚弄它:

    var range= document.getElementById('range');
    range.onchange({target: range});
    

    或者,如果可以,将处理程序代码更改为使用 this 而不是 event.target . 除非您使用委托(从父对象捕获子对象上的更改事件,这对更改事件来说很麻烦,因为IE不会冒泡这些事件),否则更改事件的目标始终是事件处理程序注册到的元素,使 事件.目标

    如果事件处理程序使用 事件 目标 addEventListener ,或 attachEvent onchange 财产。这取决于浏览器( fireEvent 对于IE, dispatchEvent 对于标准),而在较旧或更模糊的浏览器上不可用。

        2
  •  6
  •   GôTô    10 年前

    尝试使用 fireEvent

    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);
    }
    
        3
  •  3
  •   Yakimych    15 年前

    一般来说,您的代码应该可以正常工作。不过,可能还有其他原因导致了这个问题。

    • 这两条线你在哪?
    • range 运行代码(例如
    • 你确定吗 你只有 一 id为的元素 范围 在页面上?
    • onchange() 功能执行(可以是 贴在这里有帮助吗?

    $('#range').trigger('change');
    

    $('#range').change();
    

    http://api.jquery.com/change/

    但正如我所提到的,你的案子也应该很好: http://jehiah.cz/a/firing-javascript-events-properly

        4
  •  2
  •   SquidScareMe    15 年前

    http://www.mail-archive.com/jquery-en@googlegroups.com/msg44887.html

    有时需要创建一个 与运行事件不同 功能(触发)

    这可以通过下面的火来完成 代码

    > var el=document.getElementById("ID1")
    > 
    > fire(el,'change')
    > 
    > 
    >    function fire(evttype) {
    >        if (document.createEvent) {
    >          var evt = document.createEvent('HTMLEvents');
    >          evt.initEvent( evttype, false, false);
    >          el.dispatchEvent(evt);
    >        } else if (document.createEventObject) {
    >          el.fireEvent('on' + evttype);
    >        }    } looks like this trick is not yet in jQuery, perhaps for a
    > reason?
    
        5
  •  0
  •   Mike C    15 年前

    fiddle ). 你还有其他可能是问题的代码吗?您是如何定义onchange处理程序的?