首页 > jquery绑定事件调用函数的问题

jquery绑定事件调用函数的问题

写法一

$(".a").on("click",function(){
                   test();
                });
            

test()函数正常被调用。

写法二 $(".tl").on("click",test)

test()函数正常被调用。

错误写法 $(".tl").on("click",test())

求问为什么第三种写法错误。不能再这个位置添加括号。

在附加一个问题,html中

<a onclick="test()"><a>

正常执行

<a onclick= test ><a>

不能执行,为什么?


你要记住,function(){}这是个函数,你也可以理解成一个对象。这就相当于在内存中存了个地址(如果没懂请忽视)。jq呢是封装好了的js,一般on(event,fun)绑定的第一个 参数是事件名称(一般都不带on,这也是 jq区别js事件名的一个特征),第二个是函数,对,是指事件调用的函数。在原生的js里面 我们写 js事件的时候,一般都是这样写: object.eventName=function(){};比如 `object.onclick=function(){...};jq的on()只不过是把 onclick 跟 function(){}给分开了,当做两个参数;本质一样!而一般 在js里面,比如test()这种写法,是所谓的调用,是指之前你已经写好了个 function test(){...}函数,来调用他,即所谓的执行;你要记住带括号的就是调用 执行,只要是调用执行就一定会有返回值。好了扯了有点远,在回过头来看 jq是用js封装好了的,on()里面的第二个参数是指事件执行的函数,不是直接调用 ,function test(){};跟test();是不同的,前者只是个 叫 test的函数,只是个地址,并没有执行。只有调用才执行,并有返回值;on的第二个参数总不是要个返回值吧,是要执行的那个函数,函数里面执行什么代码那就随便你写咯,你在里面写的是 调用 test();(我尽力说明白了,感觉有点绕,请采纳~)


test() 这种语法是调用函数,
$(".tl").on("click",test()) 这个意思是吧test()函数返回的结果传给click事件的回调。

第一种写法里,function(){} 是一种引用对象,传给了click事件的回调,那么在这是function(){...}里的任何可执行代码都会在$(".a")触发click事件时执行。

第二种写法的意思是,test这个函数作为$(".tl")的click回调事件。

题主的问题是不明白函数的本质是什么,加()代表调用函数并返回函数运算的返回值,不加括号代表所声明的这个函数对象。


因为那样相当于函数执行后把返回值赋给那个事件要执行的操作,如果那个函数返回值是underfine,自然是不会执行任何东西的,如果你那个函数里面再return 一个function,那事件触发后会执行return的那个函数,你可以试一下

【热门文章】
【热门文章】