【问题标题】:What's wrong with addlistener... how do i fire my eventaddlistener 有什么问题...我如何触发我的事件
【发布时间】:2010-03-24 07:29:17
【问题描述】:

我正在使用以下函数来完成我的任务。当光标离开文本框时它工作正常,但如果我想从代码中触发相同的事件,比如下一个函数,我会收到错误...

function addEvent( obj, type, fn ) {
 if (obj.addEventListener) {
  obj.addEventListener( type, fn, false );
 }
 else if (obj.attachEvent) {
  obj["e"+type+fn] = fn;
  obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
  obj.attachEvent( "on"+type, obj[type+fn] );
 }
 else {
  obj["on"+type] = obj["e"+type+fn];
 }
}

function addEventByName(ObjName, event, func){
 MyEle = document.getElementsByName(ObjName);
 addEvent(MyEle[0], event, func);
}

addEventByName("txtBox", 'blur', function(){
 alert('hello');
});

function fire(){
 x = document.getElementsByName('txtBox')[0];
 x.blur(); //gives error
 x.onblur(); //gives error
}

【问题讨论】:

    标签: javascript javascript-events


    【解决方案1】:

    修改this answer 中作为 jQuery 扩展给出的代码,这里有一个函数可以用来以编程方式跨浏览器触发事件​​:

    function fireEvent(el, eventType)
    {
        if (document.createEvent)
        {
            var evt = document.createEvent("HTMLEvents");
            evt.initEvent(eventType, false, false);
            el.dispatchEvent(evt);
        }
        else if (document.createEventObject)
        {
            el.fireEvent("on" + eventType);
        }
    }
    

    您的fire 函数将如下所示:

    var x = document.getElementsByName("txtBox")[0];
    fireEvent(x, "blur");
    

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2022-01-19
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2012-01-11
      • 1970-01-01
      相关资源
      最近更新 更多