Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2012, 19:20
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Почему колбек ведет себя по разному?
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/

Объясните, почему так происходит? По мне, так все должно работать как второй вариант.
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2012, 19:50
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Прочитайте про область видимости переменной. Измените аргумент id на другой.
$('button').click(function(event) {callback(id)})
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2012, 20:50
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Читал. Согласен, что не очень корректно использовать одно и то же название, но получается что у нас в разных областях видимости все-равно одна и та же переменная, как ни крути. Откуда только null берется, не пойму.

А по первому варианту? Почему $('button').click(callback(id)); срабатывает сразу, а не по клику?
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2012, 20:54
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Конечно сразу. Смотрите пока не увидите в чем проблема. Она смешная.
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2012, 21:03
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

И так час втупляю
function edit(id, callback) {
    $('button').click(callback(id));
}

edit('1', function(id){
    if (id === '1') {
        alert('OK');
    } else {
        alert('Err');
    }
})

callback — объект типа функция. Сам, по идее, запускаться не должен. Отдельно его нигде не запускаю...

Цитата:
Разницу чувствуешь?
Так у меня же var a = doSomething; нет?

Последний раз редактировалось Shitbox2, 18.12.2012 в 21:05.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2012, 21:14
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Теперь ясно! Жаль что нельзя отдельно ссылку и параметры передать, не создавая безымянную функцию
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2012, 21:41
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

А как правильнее данные передавать?
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); });
}
Ответить с цитированием
  #8 (permalink)  
Старый 19.12.2012, 11:26
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Ага! В моем случае id это как раз $item.data.id
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В хроме слайдер ведет себя очень странно Alex_meri39 jQuery 3 01.02.2012 02:03
jCarousel странно себя ведет oke11o jQuery 0 14.11.2011 10:45
Странно себя ведет простейшая проверка введенных данных в форме San4eZ Общие вопросы Javascript 7 06.10.2011 09:17
Оператор if по разному ведет себя в IE, Firefox и пр bartonom Javascript под браузер 1 03.06.2011 21:24