javascript - 具有通用参数处理的回调函数

标签 javascript

我想创建一个 JS 函数,它独立于调用它的位置来处理其参数。 AFAIK 参数有所不同,具体取决于调用函数的位置。

示例 1

常见的用法是在 HTML 中注册该函数:

<input type="text" id="text1" onkeyup="myFunc(this);">

然后该元素将被传递给函数:

function myfunc(element) {
    alert(element.value);
}

示例 2

另一个,appoach是在文档加载完成时动态注册它。类似的事情:

// init() gets called when document is ready
function init() {
    document.getElementById('text2').addEventListener('keyup', myFunc2);
}

现在该函数将接收事件对象而不是元素对象。 我需要更改功能代码才能访问信息。

function myFunc2(event) {
    var element = event.target;
    alert(element.value);
}

示例3

解决此问题的一种方法是完全忽略参数并始终收集函数内的所有信息,如下所示:

function myFunc3(event) {
    var element = document.getElementById('text3');
    alert(element.value);
}

这个解决方案的丑陋之处在于,GUI 将与逻辑紧密耦合。

示例 4?

我能想到的一个解决方案是更改解决方案1并将this打包到事件对象中?我还没有尝试过这个,我不知道如何最优雅地做到这一点。

Ps:“不允许”使用 JQuery

最佳答案

第一个可以像这样重写(请注意,最好不要将标记与事件处理程序混合,但是如果您确实想要它,那么可以这样编写)

<input type="text" id="text1" onkeyup="myFunc(event);">

第二个将从 events target 属性获取输入。

function myFunc(e) {
  let element = e.target;
  console.log( 'event comming from ' + element.id );
  console.log( 'current value is ' + element.value );
}

window.addEventListener('load', function() {
  let el = document.querySelector('#text2');
  el.addEventListener('keyup', myFunc);
});
<input type="text" id="text1" onkeyup="myFunc(event);">
<input type="text" id="text2">

关于javascript - 具有通用参数处理的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46214509/

相关文章:

javascript - jquery mobile listview 圆 Angular 问题

javascript - 按属性分隔元素数组

javascript - nodejs循环async.parallel回调

javascript - 单击图例中的项目时如何禁用 ZingChart 中的栏消失

javascript - SignalR:如果没有客户端方法,则不会调用 Hub OnConnected

javascript - 修复 React onDragExit 和 onDrop 事件在 Chrome 中不起作用的问题

javascript - 如何将变量值保留在函数之外?

javascript - react 路由器导航链接不会在路线更改时更新

javascript - 如何将html文件用作div

javascript - JQuery 进度条动画