dojo eventListener через dojo.connect подключается к нескольким объектам с одинаковым идентификатором

Я пытаюсь прикрепить событие 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, и я не вижу никаких событий, запускаемых, когда я щелкаю где-либо на странице, поэтому я почти уверен, что это не проблема с присоединением прослушивателя событий к неправильному фрагменту. ДОМ.


person xenador    schedule 05.02.2011    source источник


Ответы (2)


поэтому кажется, что dojo применяет схему, в которой идентификаторы уникальны, поэтому, если какой-либо элемент DOM имеет идентификатор, совпадающий с другим, конечным результатом является то, что метод запроса возвращает только первый.

вот пример того, что у меня получилось:

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

.links указывает class="links", а затем оттуда я сортирую любые объекты привязки, включая "a" после, и я использую функцию удобства для события onclick, захватываю цель и передаю ее функции onSubmit (которая содержит некоторую проверку и запрос xhr.).

person xenador    schedule 05.02.2011
comment
Как бы то ни было, использование идентификатора на любых узлах DOM более одного раза считается недопустимым. В этот момент поведение браузера может быть непоследовательным. Решение, которое вы придумали, действительно лучшее. Если вам нужно указать группу элементов, лучше всего подойдет класс. Идентификатор предназначен для одного отдельного и уникального узла. - person Brian Arnold Sinclair; 06.02.2011
comment
@Brian - да, прочитав еще немного, я обнаружил, что лучше всего оставить идентификаторы уникальными, изначально я думал, что хорошей абстракцией для применения стилей CSS будет использование класса для родительских узлов или узлов, которые имеют неуказанные дочерние элементы и идентификаторы для указанного ... это была хорошая отправная точка, но привычка, которую я бросаю. - person xenador; 06.02.2011

Попробуй это:

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