Как установить уникальный идентификатор для элемента в цикле с Mootools? - PullRequest
0 голосов
/ 27 октября 2009

Мне нужно установить уникальные числовые атрибуты rel для якорных элементов в таблице с классом "tdresult". Я пытаюсь установить их в цикле, но я не очень хорош в Javascript и, вероятно, не понимаю петли.

$$('.tdresult').each(function(chooseClass) {
    var ellen=chooseClass.getElements('a').length;
    var eli=chooseClass.getElements('a').each(function(el){
    for (i=0; i<ellen; i++){
    var elic=el.set('rel',i++);  //trying to set numeric ids for anchor els (from 0 to //max (ellen)
    }
    });
    chooseClass.addEvent('mouseenter', function(el) {
    infoGet(1,uniqueid); // function that sets the ajax request using unique id from loop
        }); 
});

Может кто-нибудь посоветовать мне, как это сделать?

Ответы [ 3 ]

1 голос
/ 27 октября 2009

Я не уверен на 100%, что понимаю, что вы делаете, но это выглядит , как вы:

  1. Поиск каждого a элемента внутри каждого .tdresult элемента
  2. добавление уникального значения к атрибуту rel для каждого
  3. добавление события mouseenter к каждому, использующему этот атрибут rel

Если вы хотите сохранить уникальное значение, попробуйте store и retrieve:

var unique_id = 0;
$$('.tdresult a').each(function(el){
    el.store('unique_id',unique_id);
    el.addEvent('mouseenter', function(evt) {
        infoGet(1,this.retrieve('unique_id')); 
    });     
    unique_id++;
});

Хотя возможно, я неправильно понимаю задачу.

1 голос
/ 27 октября 2009

Это намного проще в mootools, потому что каждый из них дает вам счетчик, и как вы в замыкании на каждом цикле, который вы делаете, нужно хранить идентификатор. Проверить в mooShell (активировать консоль)

$$('td a').each(function(el, uId){
        el.addEvent('mouseenter', function() {
               infoGet(1, uId);
        });     
});
1 голос
/ 27 октября 2009

Это должно делать то, что вы хотите, если я правильно понимаю вопрос

var offset = 0;
$$('.tdresult').each(function(chooseClass) {
 chooseClass.getElements('a').each(function(el){
      el.set('rel',offset); 
      el.addEvent('mouseenter', function(uniqueid) {
         return function() {
           infoGet(1,uniqueid); 
         }
      }(offset)); 
      offset++
 });

});

offset увеличивается с циклом, но объявляется вне его. Каждый раз при запуске цикла будет увеличиваться та же самая переменная offset. Цикл, который был там ранее, не был необходим.

Хотя один вопрос ... почему вы устанавливаете атрибут rel в число? см. http://www.w3schools.com/TAGS/att_a_rel.asp для получения списка допустимых значений. Также обратите внимание, что ни один из основных браузеров не использует этот атрибут в любом случае. (Epic fail для поддержки стандартов для всех)

EDIT

Я заметил, что вы пытались сделать со слушателем событий. Я изменил код, чтобы сохранить текущее смещение в замыкании с помощью обработчика событий. Функция в обработчике событий немедленно запускается с текущим значением offset. Внутри функции это называется uniqueid. Затем функция возвращает функцию обработчика реального события, но поддерживает использование переменной uniqueid (не смещение, а значение смещения во время вызова внешней функции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...