HTML多个事件触发相同的功能

时间:2015-04-22 06:14:17

标签: javascript jquery html

有没有办法让多个事件(例如oninput,onblur )在HTML中触发完全相同的功能?

这是我试图简化的HTML:

<input id="Email" name="Email" type="text" oninput="toggleSuccessIcon(this, isEmail)" onblur="toggleSuccessIcon(this, isEmail)">

我知道这可以在jQuery中解释here,但由于我有很多不同的输入(例如地址,邮政编码等),需要调用不同的函数(例如 toggleSuccessIcon(this,isAddresss),toggleSuccessIcon(this,isPostCode)等。)我想避免在JavaScript中进行冗长而混乱的初始化。但是,如果我在HTML而不是JQuery中这样做是愚蠢的,我会理解使用JQuery的优势的解释。

请注意 isEmail isAddress isPostCode 等是函数名称。

3 个答案:

答案 0 :(得分:3)

您可以将data用作:

<input class="configurable-events" type="text" data-events="blur focus click" data-function="myFunction" />
<input class="configurable-events" type="password" data-events="blur focus" data-function="myPasswordFunction" />

在jQuery中你可以使用类似的东西:

$('.configurable-events').each(function(){
    $(this).on($(this).data('events'), function(){
      $(this).data('function')($(this));
    });
});

function myFunction(myInput) {
  console.log(myInput.value());
}

function myPasswordFunction(myPasswordInput) {
  console.log(myPasswordInput.size());
}

答案 1 :(得分:2)

您可以使用辅助功能

// events and args should be of type Array
function addMultipleListeners(element,events,handler,useCapture,args){
  if (!(events instanceof Array)){
    throw 'addMultipleListeners: '+
          'please supply an array of eventstrings '+
          '(like ["onblur","oninput"])';
  }
  //create a wrapper for to be able to use additional arguments
  var handlerFn = function(e){
    handler.apply(this, args && args instanceof Array ? args : []);
  }
  for (var i=0;i<events.length;i+=1){
    element.addEventListener(events[i],handlerFn,useCapture);
  }
}

function handler(e) {
  // do things
};

// usage
addMultipleListeners(document.getElementById('Email'),
                     ['oninput','onblur'],handler,false);

答案 2 :(得分:1)

$("input").on( "click blur", toggleSuccessIcon(this, isEmail));