2013-09-02 4 views
2

Я пытаюсь сделать ячейку в таблице, сообщите мне ее номер, когда я нажму.Javascript, присваивающий значение переменной

for(var j = 0; j < 8; j++){ 
    var cell = row.insertCell(j); 
    cell.name = j; 
    cell.onclick=function(){alert(cell.name)}; 
} 

Это, однако, печатает число 8 для каждой ячейки. Как сохранить значение j в cell.name, вместо того, чтобы просто указывать на переменную j?

Спасибо.

+2

Но, уходя из вашего кода, ссылка на вашу ячейку представляется постоянной? – Lloyd

+1

Где вы инициализируете 'cell'? – Uooo

+0

Если у вас есть только одна ячейка, это не сработает. –

ответ

5

ВАЖНО: Все разработчики JavaScript должны это знать. Это вызовет всевозможные странные ошибки, которые очень трудно найти.

Это распространенная ошибка людей, которые не знакомы с JavaScript. Я сделал ту же ошибку раньше.

Функция внутри цикла НЕ создается для каждой итерации. Это тот же самый объект функции с той же областью закрытия. Таким образом, ваши ячейки будут иметь тот же самый обратный вызов onclick.

Мой совет здесь НИКОГДА не создает функцию внутри цикла. Вместо этого создайте и вызовите функцию, которая возвращает функцию обратного вызова и назначает ее onclick.

for (var j = 0; j < 8; j++) { 
    var cell = row.insertCell(j); 
    cell.name = j; 
    cell.onclick = createOnClick(cell); 
} 

function createOnClick(cell) { 
    return function() { 
     // do whatever you want to do with cell 
    }; 
} 
+0

Что-то вроде этого? функция a (имя) { функция b (имя) { предупреждение (имя); } return b(); } – stefan

+0

Я приведу вам пример через несколько минут после включения моего ноутбука. – Joon

+0

добавленный пример кода – Joon