Почему колбек ведет себя по разному?
function edit(id, callback) { $('button').click(callback(id)); //Запускается сразу $('button').click(function() {callback(id)}) //Запускается при щелчке $('button').click(function(id) {callback(id)}) //Запускается при щелчке, но callback возвращает ошибку из-за того, что вместо id передается null } Рабочий пример: http://jsfiddle.net/tamtakoe/WX7SB/ Объясните, почему так происходит? По мне, так все должно работать как второй вариант. |
Прочитайте про область видимости переменной. Измените аргумент id на другой.
$('button').click(function(event) {callback(id)}) |
Читал. Согласен, что не очень корректно использовать одно и то же название, но получается что у нас в разных областях видимости все-равно одна и та же переменная, как ни крути. Откуда только null берется, не пойму.
А по первому варианту? Почему $('button').click(callback(id)); срабатывает сразу, а не по клику? |
Конечно сразу. Смотрите пока не увидите в чем проблема. Она смешная.
|
И так час втупляю
function edit(id, callback) { $('button').click(callback(id)); } edit('1', function(id){ if (id === '1') { alert('OK'); } else { alert('Err'); } }) callback — объект типа функция. Сам, по идее, запускаться не должен. Отдельно его нигде не запускаю... Цитата:
|
Теперь ясно! Жаль что нельзя отдельно ссылку и параметры передать, не создавая безымянную функцию
|
А как правильнее данные передавать?
function edit(id, callback) { var self = this; $('button').click(function() { callback(self.id); }); } function edit(id, callback) { $('button').click(function() { callback(id); }); } function edit(id, callback) { $('button').click({'id':id}, function(e) { callback(e.data.id); }); } |
Ага! В моем случае id это как раз $item.data.id
|
Часовой пояс GMT +3, время: 17:57. |