js事件委托怎样传参数?

2012-05-11 10:44:54 +08:00
 jtyjty99999
大家好。。我今天正在尝试把以前人写的一大堆jq click事件绑定改成纯js的事件委托。。但是,如果这个事件绑定本来是在ajax的success后绑定的,再传入success后的data,那事件委托到document后,怎样再给函数传入data啊。。 。我的思路就是改变事件对象上面自定义属性来判断是否执行
4964 次点击
所在节点    JavaScript
13 条回复
benzhe
2012-05-11 10:48:57 +08:00
木有代码示例很难理解,可以尝试重载事件?
jtyjty99999
2012-05-11 10:58:38 +08:00
@benzhe 是这样的,比如我发起一个ajax请求,在success中返回data,之后$(#id).click(function (data){})
现在我想把这个function (data)提到document上面,做成
document.onclick = function(ev) {
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
switch (target.id) {
case "id":
$(target).attr('binded')&&function(data);
break;

但这样就会报data未定义了。。。
EchoFUN
2012-05-11 11:06:48 +08:00
试试,把返回的data付给window。即,window.data = data。
或者再success后执行一个回调,在回调中再addeventlistener或者attachevent下这个方法。
krazy
2012-05-11 11:06:56 +08:00
为什么要改成原生js,不用jquery的delegate。

回复里面应该是变量作用域的问题
EchoFUN
2012-05-11 11:08:10 +08:00
@EchoFUN window.data = data。data就是全局的了,其他地方也可以引用。
jtyjty99999
2012-05-11 11:25:51 +08:00
@EchoFUN 这样我也考虑了。。会污染全局变量吧。。。
benzhe
2012-05-11 11:34:59 +08:00
@jtyjty99999 如果一定要先委托,全局变量应该是最好的办法,怕污染的话可以先定义好这个变量。否则就选择在后面重载事件。
jtyjty99999
2012-05-11 11:36:08 +08:00
可以用delegate,但是就不知道原生js是怎么实现传值的
jtyjty99999
2012-05-11 11:47:32 +08:00
@benzhe 好的~明白了,非常感谢,最后我的办法是,把data赋给了元素的某个属性。。。
yangg
2012-05-11 11:49:58 +08:00
@jtyjty99999 那也用$("el').data()方法 啊
wong2
2012-05-11 12:02:47 +08:00
不想污染全局变量的话可以这样吧。。

!function(){
var data;

$.get("/echo/json/", function(responseData){
data = responseData;
});

document.onclick = function(ev) {
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
switch (target.id) {
case "id":
$(target).attr('binded') && alert(data);
break;
}
};
}();
wong2
2012-05-11 12:03:34 +08:00
@wong2 格式全乱了。。。来这里看吧: http://jsfiddle.net/UCCDL/
jtyjty99999
2012-05-11 13:02:16 +08:00
@wong2 明白你的意思~非常感谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/35460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX