2012-06-01 2 views
2

У меня проблема с моим кодом, атрибут title показывает только 16, а не показывает все значения от 1 до 15. Почему это так может кто-нибудь предположить, что я делаю неправильно ???Функция jquery внутри цикла не повторяется

Моего код

x=1; 
while(x <= 15) 
{ 
    $("td#id"+x).mouseover(function(x){ 
    $(this).attr('title', x)   
    }); 
    x++; 
} 
+0

Это часть большого скрипта, кубики таблицы динамически генерируются и имеют идентификатор, атрибут title будет иметь значение x, которое является итератором, поэтому, если, например, someval <тд ID = 2 название =" 2 "> someval .... <тд ID = 15 название =" 15" > someval – learner

ответ

1

Функция, которую вы предоставляете JQuery в качестве обработчика событий хранит указатель на внешний блок, в котором она была определена и для ее (жизни) переменных. Так закрывается работа.

Так что, когда она выполняется, х 15.

Я знаю, что большинство Java-разработчики не знают, как это работает, но это очень интересная вещь, чтобы знать: http://jibbering.com/faq/notes/closures/

EDIT: Я выиграл 't добавить здесь обычное исправление, которое я намеревался добавить, поскольку Алнитак указал мне на то, что обратный вызов был фактически бесполезным в этом случае;)

9

Это очень распространенный ", используя переменную цикла в проблема обратного вызова.

Как вы используете JQuery простейший исправить это data параметр для обработчика:

var x=1; 
while (x <= 15) { 
    $("td#id"+x).mouseover({ x: x }, function(ev) { 
     this.title = ev.data.x;   
    }); 
    x++; 
} 

Тем не менее, почему вы настройки только это в mouseover функции? Заголовок должен быть добавлен к элементам непосредственно, только один раз:

for (var x = 1; x <= 15; ++x) { 
    document.getElementById('id' + x).title = x; 
} 

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

+0

Вы меня удивляете с простотой +1 –

+0

+1 для отличный снимок. – thecodeparadox

+0

Данные о событиях должны идти первым :) – VisioN

Смежные вопросы