有没有一种方法可以检索内联JavaScript调用的元素源?
我有一个这样的按钮:
<button onclick="doSomething('param')" id="id_button">action</button>
注意事项:
- 该按钮是从服务器生成的
- 我不能修改生成过程
- 在页面上生成几个按钮,我只能在客户端控制。
我所尝试的:
function doSomething(param){
var source = event.target || event.srcElement;
console.log(source);
}
在firebug上,我得到事件未定义
编辑:经过一些回答,使用jQuery覆盖事件处理是非常可以接受的。我的问题是如何调用原始的onClick函数与它的原始参数,而不知道函数名称。
验证码:
<button onclick="doSomething('param')" id="id_button1">action1</button>
<button onclick="doAnotherSomething('param1', 'param2')" id="id_button1">action2</button>.
<button onclick="doDifferentThing()" id="id_button3">action3</button>
.
.
and so on..
所以覆盖将是:
$(document).on('click', 'button', function(e) {
e.preventDefault();
var action = $(this).attr('onclick');
/**
* What to do here to call
* - doSomething(this, 'param'); if button1 is clicked
* - doAnotherSomething(this, 'param1', 'param2'); if button2 is clicked
* - doDifferentThing(this); if button3 is clicked
* there are many buttons with many functions..
*/
});
6条答案
按热度按时间jm2pwxwz1#
你的HTML应该是这样的:
将输入参数重命名为事件,
能解决你的问题
顺便说一下,我建议看看jQuery和不显眼的JavaScript
cx6n0qe32#
您应该将生成的HTML更改为不使用内联JavaScript,而是使用
addEventListener
。如果你不能**以任何方式改变HTML,你可以获取
onclick
属性,使用的函数和参数,并通过删除onclick
处理程序和使用事件侦听器将其“转换”为不显眼的JavaScript。我们首先从属性中获取值
这给了我们一个数组,其中包含
onclick
属性调用的所有全局方法以及传递的参数,因此我们可以复制它。然后我们删除所有的内联JavaScript处理程序
把我们自己的联络人
在这些处理程序中,我们将获取存储的原始函数调用及其参数,并调用它们。
正如我们所知,内联JavaScript调用的任何函数都是全局的,我们可以用
window[functionName].apply(this-value, argumentsArray)
调用它们,所以在click处理程序中,我们可以在调用原始函数之前或之后添加任何我们想要的东西。
一个工作示例
9wbgstp73#
调用函数时可以传递
this
dsf9zpds4#
跨浏览器解决方案
我相信@slipset的解决方案是正确的,它不需要jQuery,但是它没有跨浏览器准备好。
根据Javascript.info,事件(当在标记事件之外被引用时)是跨浏览器就绪的,只要你确保它是用下面这行简单的代码定义的:
event = event || window.event
。因此,完整的跨浏览器就绪函数看起来像这样:
试试吧!我已经包括了有用的信息来源的回报。
kqqjbcuj5#
试试这样的方法:
gz5pxeao6#
使用.live()
从jQuery 1.7开始,.live()方法被弃用。使用.on()附加事件处理程序。