Javascript 如何将函数绑定到onclick属性?

Javascript 如何将函数绑定到onclick属性?,javascript,jquery,html,Javascript,Jquery,Html,我在html中有一个绑定到onclick事件的函数,如下所示: <script> function f1(){ alert('hello world'); }; </script> <a onclick="f1()">test</a> 但是defaultFunction被定义为字符串,而不是函数本身。我可以用eval(defaultFunction)对它进行评估,但这让我感觉脏兮兮的。有没有办法访问函数本身而不是字符串 i、 e.我希望

我在html中有一个绑定到
onclick
事件的函数,如下所示:

<script>
    function f1(){ alert('hello world'); };
</script>

<a onclick="f1()">test</a>
但是
defaultFunction
被定义为字符串,而不是函数本身。我可以用
eval(defaultFunction)
对它进行评估,但这让我感觉脏兮兮的。有没有办法访问函数本身而不是字符串

i、 e.我希望能够调用
defaultFunction()
并执行绑定到
a
元素的默认onclick行为。(在本例中,调用
f1()

使用以下方法:

function f1() { 
    alert('hello world');
};
$('a').on('click', f1);

这是您的修复程序:

您可以通过编程触发click事件,而不是尝试内联复制函数绑定:

function defaultFunction() {
    $("a[onclick]").click(); // change selector to match your actual element
}

最好使用addEventListener()您可以添加所有类型的事件。例如:“单击”、“鼠标移动”、“鼠标覆盖”、“鼠标移出”、“调整大小”等等。最后的false是阻止事件向上遍历dom。如果希望父dom对象也接收事件,只需将其更改为true即可。这个例子也不需要javascript库。这只是简单的旧javascript,可以在每个浏览器中工作,无需额外的东西

另外,addEventListener()比onClick()更好,因为您可以向dom元素添加无限数量的事件监听器。如果在元素上有一个onClick(),然后在已覆盖第一个onClick()的同一元素上设置另一个onClick()。使用addEventListener()如果我想在单击某个元素时触发多个单击事件,那么我可以毫无问题地执行

如果需要有关触发事件的元素的数据,可以将事件传递给函数。在我的示例中,您将看到函数(e)e是事件,您可以使用ethis以被触发的元素为目标。使用e或这个,我还可以获得更多关于触发事件的数据。例如,如果事件是mousemove或mouseclick,我可以获得事件发生时鼠标的x和y位置

   <!DOCTYPE html>
    <html>
    <head>
    <title>exampe</title>
    </head>
    <body>
        <a id="test" href="">test</a>
    <script>
        document.getElementById("test").addEventListener("click",function(e){
            alert('hello world');
            alert('my element '+e);
            alert('my element '+this);
        },false);
    </script>
    </body>
    </html>
这将执行该函数

function f1(){ ... }

当您想要删除事件侦听器时,只需调用target。removeEventListener(键入listener[,useCapture])。非常简单,易于管理

查看此
文档。getElementById(“您元素的id”)。onclick
如果这对您有帮助,它将返回
单击
处理程序,您可以调用该处理程序,但手动引发事件是不对的它只是
onclick
属性,不需要jQuery:

<script>
    function f1(){ alert('hello world'); };
</script>

<a onclick="f1()" id="aa">test</a>
<a id="bb">test2</a>

<script>
    bb.onclick = aa.onclick;
    // or
    bb.onclick = function (){ alert('hello bb'); };   
</script>

函数f1(){alert('hello world');};
测验
测试2
bb.onclick=aa.onclick;
//或
bb.onclick=function(){alert('hello bb');};
类似这样的内容:



在我的例子中,
f1
已经定义,并且绑定到
a
元素。我试图找出什么被绑定到
a
元素,这样我就可以做一些类似于将它绑定到另一个节点的事情。如果我知道它是
f1
,我会直接绑定它,但我不知道。如果你想在一个元素上有多个事件,或者如果你想让你的生活变得简单和容易,所有的代码都可以管理。然后使用addEventListener()我认为真正的问题是,你为什么要这样做,你真正想实现什么我主要是想满足自己的好奇心。我回答了另一个问题,不确定如何将函数绑定到
onclick
属性,因此我想我会问。您可能需要查看其他答案,因为您当前选择的答案不是正确答案。它是唯一真正回答我问题的答案。其余部分告诉我应该如何以不同的方式绑定函数。html中的onclick()很快将不再工作,并且被认为是不好的。当浏览器更新时,您的代码将中断。从现在开始,装订就是一种方式。+1对于这个-这真是一种表达“你确定你想这样做吗?”:):)是的。OP的问题被误解了。请大家注意,阅读本文并开始“wut?”:此代码首先获取onclick属性(作为文本),然后提取函数名,然后单击检查该函数是否存在于全局命名空间(
窗口
)中,然后再调用它。既聪明又愚蠢+1以上评论。问题是纯R&D类型,上面的代码显示了一种基于函数名称调用函数(如果它存在于默认窗口命名空间中)的方法。但是为什么呢?该字符串已经被解析并生成了一个漂亮的函数对象。为什么不直接使用这个函数呢?对于任何考虑使用此代码的人来说,这只是一个警告:直接以id作为变量访问DOM元素(如
aa
bb
)被认为是不好的形式,可能不适用于任何地方。阅读更多@xec是的,这只是一个简短的快捷方式。这是一个光荣的方式做点击事件,不应该使用。内联事件处理程序不受欢迎。我们不再使用html2了,我们使用的是html5,应该删除内联事件处理程序。@PatrickW.McMahon原创海报,这是问题的作者。我如何向OP发送通知?是什么让你认为你可以走到这里,发布体面、有效和正确的代码,并以正确的方式做事?我们在发布可怕的代码时玩得很开心,你让我们看起来都很糟糕!(呃……我的意思是欢迎使用堆栈溢出!)这个答案应该被选为最佳答案。让我们来看看。简单的
addEventListener
的问题是,在运行时,您不知道自己有哪些侦听器,而这正是OP所需要的。简单的故障排除可以告诉人们哪些事件侦听器连接到某个项目。此外,浏览器还提供了用于检查连接到图元的所有事件的工具。您还可以使用内置工具在浏览器中查看事件触发。
function f1(){ ... }
<script>
    function f1(){ alert('hello world'); };
</script>

<a onclick="f1()" id="aa">test</a>
<a id="bb">test2</a>

<script>
    bb.onclick = aa.onclick;
    // or
    bb.onclick = function (){ alert('hello bb'); };   
</script>
var defaultFunction = $('a').attr('onclick');
var defaultFunctionName = defaultFunction.substring(0, defaultFunction.indexOf('('));

$('div').on('click', function(){

   if(typeof window[defaultFunctionName] ==="function")
   {
         window[defaultFunctionName]();
   }
    alert('Hello universe!');
});