javascript - 如何在 JavaScript 中为各种事件创建单个事件处理程序

标签 javascript jquery event-handling jquery-events

我想用 JavaScript/jQuery 做以下事情:

JavaScript

伪代码!

$.bindalleventhandler('[action]', eventHandler);

eventHandler = function(trigger, element){
    if(trigger == 2 && $(element).attr('event') == 'change'){
        // execute action when change occurs
    }
    else if(trigger == 5 && $(element).attr('event') == 'keydown'){
        // execute action on keydown event
    }
    else{
        //default click
        // execute action by click
    }
}

HTML

<button action="action">click me</button>
<select name="name" action="action" event="change">
     <option value="value">name</option>
     <option value="value">name</option>
     <option value="value">name</option>
</select>

有人知道从哪里开始吗?它必须是 AJAX 证明,就像 jQuery $.on() 方法一样。

我只想将其用于各种事件并将其绑定(bind)到包含 action 属性的元素。也许我只是解析 HTML,然后动态创建事件处理程序,但随后我必须解析每个 AJAX 调用。

免责声明:我不是要你为我编写代码,而是要让我朝着正确的方向前进。

最佳答案

让我向您展示我的自定义 addEvent 函数如何工作的总体思路:

function addEvent(element,event,callback) {
  if( !element.nodeName && element.length) {
    [].forEach.call(element,function(e) {addEvent(e,event,callback);});
  }
  else if( event instanceof Array) {
    event.forEach(function(e) {addEvent(element,e,callback);});
  }
  else if( callback instanceof Array) {
    callback.forEach(function(e) {addEvent(element,event,e);});
  }
  else {
    // do the actual event attaching here
  }
}

基本上,这让我可以传递一些简单的东西,比如
addEvent(document.body,"click",function() {alert('嗨!');});

或者我可以做一些更复杂的事情,比如:

addEvent(
  document.querySelectorAll("input[type=date]"),
  ["focus","change","keyup"],
  function(e) {
    console.log(e.type+" event fired on "+e.target);
  }
);

您应该能够根据您的需要调整我的方法:)

关于javascript - 如何在 JavaScript 中为各种事件创建单个事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20704353/

相关文章:

javascript - 如何在 vue.js 中添加 v-model 动态创建的 html?

javascript - 使用 javascript 更改 Bootstrap 3 导航栏的背景不透明度

c++ - 将虚函数放入结构中

javascript - Ajax 无法在 Codeigniter 3 中工作

jquery - 自定义选择的插件按钮

javascript - 当函数返回 Promise 时使其异步有什么好处吗?

macos - 在 Cocoa 应用程序中捕获 Capslock 按键

c# - WinRT 事件如何与 .NET 互操作

javascript - 如何设置组合框的默认选择?

javascript - Azure 移动服务 Javascript 库和更新 - 无法读取方法