Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает колбек-функция (https://javascript.ru/forum/jquery/33745-ne-rabotaet-kolbek-funkciya.html)

Shitbox2 06.12.2012 12:50

Не работает колбек-функция
 
Смысл кода в том, чтобы при пропадании фокуса текст из текстового поля сохранялся на сервере. tarea должен быть jQuery-плагином
jQuery.fn.tarea = function(options) {

    return this.each(function() {
        var $textarea = $(this);
        $textarea.on('blur', function (e) {
            ...
            options.callback(e, $textarea.val());			
        });
    });
};

$("#myForm textarea").tarea({
    ...
    callback: function(e, value) {
        $.ajax({
            'url': 'action.php',
            'data': {'text': value, 'id': $(e.target).data('id')}
        });
    });
});

Почему-то не работает. И ошибки никакой не вылазит, главное. Так хоть делаю?

Shitbox2 06.12.2012 14:13

Нашел ошибку. Пропустил запятую в списке параметров. Странно, что интерпретатор не ругался. Тем не менее и теперь не работает т.к. callback-функция передается только один раз. В остальных случаях пустота (хотя статичные параметры передаются), т.е. ф-я работать будет только в первом textarea... а надо во всех.

Shitbox2 06.12.2012 19:36

Проблема решена! Но не полностью. У меня такой код: http://jsfiddle.net/nJX5g/3/

Т.е. я генерировал новое поле и сразу же привязывал к нему tarea. И конечно, когда добавил callback, забыл его прописать в месте генерации новых полей. Как сделать так, чтобы tarea работала для любых полей, в т.ч. и вновь созданных без дублирования кода в нескольких местах?

zebra 06.12.2012 20:12

http://jsfiddle.net/nJX5g/4/

Shitbox2 06.12.2012 20:40

Эм... Нельзя делать текстовые поля статическими, т.к. они добавляются исходя из данных, полученных аяксом. И даже нельзя слушать <div id="ta">, т.к. не факт, что у нас всегда будет логика с $textarea.on('blur', function (e)... Т.е. в плагине, вообще может не быть обработчиков пользовательских действий.

Можно вопрос свести к простому, как в JS отловить изменения в DOMе в заданном контейнере? Или даже во всем документе.

zebra 06.12.2012 20:48

У вас callback функция не срабатывала для нескольких textarea. Я поправил это. О чем вы пишите дальше, непонятно

Shitbox2 06.12.2012 20:56

Все правильно сделали! Спасибо большое! Это я уже отошел от темы, нашлись просто более глубинные проблемы. Создам отдельную тему для них


Часовой пояс GMT +3, время: 10:06.