![]() | 1 benzhe 2012-05-11 10:48:57 +08:00 木有代码示例很难理解,可以尝试重载事件? |
![]() | 2 jtyjty99999 OP @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未定义了。。。 |
![]() | 3 EchoFUN 2012-05-11 11:06:48 +08:00 试试,把返回的data付给window。即,window.data = data。 或者再success后执行一个回调,在回调中再addeventlistener或者attachevent下这个方法。 |
![]() | 4 krazy 2012-05-11 11:06:56 +08:00 为什么要改成原生js,不用jquery的delegate。 回复里面应该是变量作用域的问题 |
![]() | 6 jtyjty99999 OP @EchoFUN 这样我也考虑了。。会污染全局变量吧。。。 |
![]() | 7 benzhe 2012-05-11 11:34:59 +08:00 ![]() @jtyjty99999 如果一定要先委托,全局变量应该是最好的办法,怕污染的话可以先定义好这个变量。否则就选择在后面重载事件。 |
![]() | 8 jtyjty99999 OP 可以用delegate,但是就不知道原生js是怎么实现传值的 |
![]() | 9 jtyjty99999 OP @benzhe 好的~明白了,非常感谢,最后我的办法是,把data赋给了元素的某个属性。。。 |
![]() | 10 yangg 2012-05-11 11:49:58 +08:00 @jtyjty99999 那也用$("el').data()方法 啊 |
![]() | 11 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; } }; }(); |
![]() | 12 wong2 2012-05-11 12:03:34 +08:00 ![]() @wong2 格式全乱了。。。来这里看吧: http://jsfiddle.net/UCCDL/ |
![]() | 13 jtyjty99999 OP @wong2 明白你的意思~非常感谢~ |