大家好。。我今天正在尝试把以前人写的一大堆jq click事件绑定改成纯js的事件委托。。但是,如果这个事件绑定本来是在ajax的success后绑定的,再传入success后的data,那事件委托到document后,怎样再给函数传入data啊。。 。我的思路就是改变事件对象上面自定义属性来判断是否执行
|
benzheMay 11, 2012
1
木有代码示例很难理解,可以尝试重载事件?
|
|
2
@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未定义了。。。 |
|
EchoFUNMay 11, 2012
3
试试,把返回的data付给window。即,window.data = data。
或者再success后执行一个回调,在回调中再addeventlistener或者attachevent下这个方法。 |
|
krazyMay 11, 2012
4
为什么要改成原生js,不用jquery的delegate。
回复里面应该是变量作用域的问题 |
|
6
@EchoFUN 这样我也考虑了。。会污染全局变量吧。。。
|
|
7
@jtyjty99999 如果一定要先委托,全局变量应该是最好的办法,怕污染的话可以先定义好这个变量。否则就选择在后面重载事件。
|
|
8
可以用delegate,但是就不知道原生js是怎么实现传值的
|
|
9
@benzhe 好的~明白了,非常感谢,最后我的办法是,把data赋给了元素的某个属性。。。
|
|
yanggMay 11, 2012
10
@jtyjty99999 那也用$("el').data()方法 啊
|
|
wong2May 11, 2012
11
不想污染全局变量的话可以这样吧。。
!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 格式全乱了。。。来这里看吧: http://jsfiddle.net/UCCDL/
|
|
13
@wong2 明白你的意思~非常感谢~
|