我想创建一个JS函数,它从调用它的地方独立处理它的参数。 AFAIK参数有所不同,具体取决于调用函数的位置。具有通用参数处理的回调函数
实施例1
甲黎民的用法是在HTML注册功能:
<input type="text" id="text1" onkeyup="myFunc(this);">
的元件将随后被传递给函数:
function myfunc(element) {
alert(element.value);
}
实施例2
另一个办法是在文档加载完成后动态注册它。类似的规定:
// init() gets called when document is ready
function init() {
document.getElementById('text2').addEventListener('keyup', myFunc2);
}
现在,该函数将收到一个事件对象,而不是一个Element-对象。 我需要更改函数代码来访问信息。
function myFunc2(event) {
var element = event.target;
alert(element.value);
}
例3
一个解决这个问题的方法是完全ingnore论点,总是聚集在函数内部的所有信息,如:
function myFunc3(event) {
var element = document.getElementById('text3');
alert(element.value);
}
丑陋件事这个解决方案是,GUI将被巧妙地耦合到逻辑。
例4?
一个解决方案,我能想到的是改变解决方案1 和包装this
成一个事件对象?我还没有尝试过这一点,我不知道如何最优雅地做到这一点。
PS:不JQuery的“允许”
忘掉解决方案1,因为在HTML代码中直接绑定事件是一个不好的做法和做事的一种常见方式初学者。解决方案3笨拙,并会在每次按键时进行DOM调用('element = document.getElementById('text3')'),这可能非常耗费资源。解决方案2看起来不错,你可以获得所有需要传递的信息。你用'element = event.target'获得你的元素,你自己做了。它出什么问题了? –
您也可以从内联处理程序传递事件对象:'onclick =“myFunc(event);”'。尽管我同意Jeremy的观点,但内联处理程序是不好的做法。 – Teemu
这实际上是我正在寻找的解决方案'onclick =“myFunc(event);''。我问的原因是纯粹的教育(我正在向初学者教这些东西)。他们有时需要先学习**例1 **,尽管它被认为是不好的。所以我在寻找从例子1 **到例子2 **的平滑过渡。有人可以将此作为答案吗?然后我可以接受它。万分感谢! –