Почему IE добавляет атрибут jQuery для серверного элемента с обработчиком при наведении курсора? - PullRequest
2 голосов
/ 19 октября 2010

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

Это приложение .NET 3.5 Web Forms. На одной из страниц есть 3 входа на стороне сервера с типом 'submit'. Каждому из этих входов назначены следующие обработчики JavaScript с помощью jQuery:

  $('.button').mouseover(function() {
    $(this).addClass('hoverEffect');
  });
  $('.button').mouseout(function() {
    $(this).removeClass('hoverEffect');
  });

Когда я запускаю следующий скрипт (да, это специфично для IE)

  $(document).ready(function() {
    d = window.open();
    d.document.open('text/plain').write(document.documentElement.outerHTML);
  });

на странице я получаю следующую наценку для кнопок:

<INPUT class=button id=ctl00_CloseButton onclick=window.close(); type=submit
       value=Close name=ctl00$CloseButton jQuery1287434381268="2">

Вопрос в том, что именно это jQuery1287434381268 = "2" ?

Эти значения изменяются от 2 до 4. Итак, первая кнопка - 2, вторая - 3, третья - 4. Число 1287434381268 меняется каждый раз, когда я перезагружаю страницу. Я знаю, что это связано с двумя обработчиками JavaScript, потому что если я их удалу, атрибута больше не будет. Это каким-то образом, как IE обрабатывает назначенные обработчики jQuery? Если я сделаю простой View-> Source в IE, этот материал не появится, как в FF Page Source или FireBug.

РЕДАКТИРОВАТЬ: Я только что запустил этот сценарий запуска на другой странице, которая имеет множество обработчиков JavaScript все назначенные с помощью jQuery. Этот атрибут присутствует в каждом элементе, который имеет обработчик.

1 Ответ

3 голосов
/ 19 октября 2010

Это атрибут расширения JQuery, это ключ в jQuery.cache объекте, который представляет коллекции данных и событий этого элемента.

В вашем примере на этой странице jQuery.cache["2"] даст вам то же самое, что и $("#ctl00_CloseButton").data(), когда вы добавляете обработчик события или данные и объект не уже не имеет его, он получает новый атрибут expando (jQuery.expando) со следующим номером в последовательности в качестве значения.

Причина, по которой это делается, в первую очередь для IE, назначение обработчиков или объектов данных непосредственно элементу приводит к тому, что сборщик мусора ведет себя очень плохо, присоединяя их с помощью этого ключа, но нет прямой ссылки, нет цикла и мусора.Коллектор ведет себя намного лучше.

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