dojo eventListener通过dojo.connect附加到具有相同id的多个对象

时间:2011-02-05 07:52:59

标签: javascript-events event-handling dojo mouseevent

所以我试图将一个onclick事件附加到一组具有相同id的链接(“linkToDisplay”),它似乎没有触发我的onclick事件代码如下:

var handle = [];
var link = dojo.query('#linkToDisplay a').forEach(function(node, index, array){

                                                    handle.push(dojo.connect(node,
                                                                            "onclick",
                                                                            null,
                                                                            function(evt) {
                                                                                console.log("mouseup detected, firring off server request");
                                                                                dojo.xhrGet({url:'default/data/getPageContent?main=true&pageId='+evt.target.name,
                                                                                             load: funcCallBack,
                                                                                             error: funcError});
                                                                                }
                                                                              ));

                                                    });

funcError和funcCallBack已定义并正常工作(如果我只传入dojo.getId检索到的单个对象,否则我的脚本会无声地失败)。

我将此代码放在dojo.addOnLoad代码块中,当我点击页面上的任何位置时,我没有看到任何事件被触发,所以我很确定将事件监听器附加到错误的DOM。

2 个答案:

答案 0 :(得分:1)

所以似乎dojo强制执行id是唯一的模式,因此如果某个DOM元素的id与另一个匹配,则最终结果是查询方法只返回第一个。

这是我最终得到的样本:

dojo.query(".links a").onclick(function(evt){
                                    dojo.stopEvent(evt);
                                    var link = evt.target;
                                    onSubmit(link)
                                }
                        );

.links指定class =“links”,然后从那里我通过包含'a'之后对任何锚对象进行排序,并为onclick事件使用便利函数,抓取目标并将其传递给onSubmit function(包含一些验证和xhr请求。)。

答案 1 :(得分:1)

试试这个:

var k=dojo.byId("linkToDisplay");
dojo.connect(k,'onclick',this,'yourfunction')