jquery如何绑定一个已有的方法并传递参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery如何绑定一个已有的方法并传递参数相关的知识,希望对你有一定的参考价值。

已有的方法如:
function abc(aaa)
alert(aaa);

点击一个按钮执行这个方法,jquery写法为:
$("button").bind("click",abc);不知如何把参数传过去?
jquery例子中有:$("button").bind("click",foo:"123",abc);这种写法,通过event.target.foo获取参数值,但已有的方法我不能改,请问如何传递参数?
但我是写成了组件,方法名和参数都是先传到组件中,所以不能直接写abc(para),组件调用代码如下:
$.("body").组件名([handler:abc,para:"afdsfds",handler:abcd,para:"1234"]);
方法不一定都是abc
按钮是在组件中创建的,并把点击调用的方法绑定上,如上会创建两个按钮,各自调用不同的方法,并传递不同的参数
如果在匿名函数里先找到组件的引用,再调相应的方法,怎么调呢?我不能写死abc(para),不知怎么写动态传入的方法名
能给写出来几行示例吗?

用闭包+匿名函数吧
$("button").bind("click",function(e)
//这里通过对e的处理得到你的待传参数值
para = e.target.foo
abc(para)
)
--
可能我没理解你的意思
按钮是什么?是组件的一部分还是随便写在html里的?
如果是一部分那么你可以用this指向组件对应的方法调用吧
如果不是的话,你也可以在匿名函数里先找到组件的引用,再调相应的方法

本质上jquery.bind是把前后两个函数的参数一一对应地进行传递赋值的……
---
晕,js支持反射的,就是说你可以通过方法名的字符串调用该方法,例如
var a;
a.b = function()/**/
a.b() //传统的调用
a["b"]()//反射调用
所以在组件里可以写个属性(比如propFuncname),返回那个方法的名字的字符串,如"abc"
然后在匿名函数里找到组件的引用,通过上述属性(propFuncname)得到方法字符串,再用反射调用之。

这样可以保证,通过对公共属性propFuncname的调用得到不同的对应的方法。
参考技术A

实现方法:

        可以将已存在的方法放在元素绑定的触发事件里,(如:点击、鼠标滑过等事件的闭包函数内)如下:

$("#id").bind("click",function()
    //这里调用已存在的方法,并按照已存在方法的参数传值
);

例如:

function show(num)
    alert(num);

$("#id").bind("click",function()//绑定点击事件(可以绑定其他事件)
    show(1);
);

防止jQuery .on多次绑定

jQuery off() 方法

$("button").click(function(){
$("p").off("click");
});

 

参数描述
event 必需。规定要从被选元素移除的一个或多个事件或命名空间。

由空格分隔多个事件值。必须是有效的事件。
selector 可选。规定添加事件处理程序时最初传递给 on() 方法的选择器。
function(eventObj) 可选。规定当事件发生时运行的函数。
map 规定事件映射 ({event:function, event:function, ...}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。

 

参考:http://www.runoob.com/jquery/event-off.html;

https://www.cnblogs.com/xiaobaimsy/p/5808269.html

以上是关于jquery如何绑定一个已有的方法并传递参数的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 绑定事件时传递参数的实现方法

如何在不传递预期参数但使用它已有的参数的情况下调用 sub?

面试官:String是值传递还是引用传递

vue-router如何参数传递

Jquery跳转页面传递参数以及获取url的参数

jQuery事件绑定