Как сохранить работу Javascript с данными ResonseText - PullRequest
0 голосов
/ 23 августа 2009

Я создавал приложение с помощью php / mysql и javascript с помощью Prototype / Scriptaculous.

На странице есть поле поиска контактов с набором данных по умолчанию в таблице HTML. Пользователь вводит некоторые символы, и таблица обновляется.

На самом деле происходит замена таблицы на новую и новые данные.

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

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

Как мне заставить это работать? Нужно ли включать скрипт в каждый вызов Ajax?

Спасибо Рич

Ответы [ 2 ]

1 голос
/ 23 августа 2009

ОК, я выложу здесь немного кода. Но да, слушатель события присоединен к элементу.

Вот немного класса Javascript, который я создавал, который ищет события из поля поиска, собирает данные из этого поля и других элементов формы и устанавливает их в this.params.

После того, как данные возвращаются в объект ajax, он обновляется на странице, которая идентична исходному коду (разные строки).

var Compass_Search = Class.create({ ...

search: function() {
    $('search_form').observe('change', this.get_data.bind(this));
},

get_data: function(e) {
    var ele =   e.target;
    var filters = $$('.search_option');
    if($(ele).tagName == 'INPUT') {
        if($(ele).readAttribute('type') == 'checkbox') {
            this.watch_filters(filters);
        }
    }

    if(this.default_text == $('search_box').value) {
        this.set_text_value('null');
    } else {
        this.set_text_value($('search_box').value);
    }


    new Ajax.Request(this.url, {
        method: 'post',
        parameters: this.params,
        onComplete: function(r) {
            result_text = r.responseText;
            $('main').update(result_text);
        }
    });
},

...});
1 голос
/ 23 августа 2009

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

Если это так, вам потребуется заново создать и снова присоединить обработчик события к новому элементу, даже если этот новый элемент точно эквивалентен заменяемому элементу.

...