0

私は、PHP/MySQL と JavaScript を使用して、Prototype/Scriptaculous でアプリケーションを構築してきました。

ページには、HTML テーブル内のデフォルトのデータ セットを含む検索連絡先フィールドがあります。ユーザーがいくつかの文字を入力すると、テーブルが更新されます。

実際に起こっていることは、テーブルが新しいテーブルと新しいデータに置き換えられていることです。

そのテーブルに対して機能する JavaScript があります。これは、ページの下部にあるスクリプト タグを介して標準的な方法で読み込まれます。

問題は、デフォルト データ (ページと共に読み込まれる部分) でのみ機能することです。検索によってテーブル データが更新されると、スクリプトが機能しなくなります。検索は最初にページに読み込まれたため、引き続き機能しますが、私のスクリプトはページの更新や新しいデータを認識していないようです。

どうすればこれを機能させることができますか? すべての Ajax 呼び出しにスクリプトを含める必要がありますか?

ありがとうリッチ

4

2 に答える 2

1

関連するコードを投稿することは役に立ちますが、AJAX呼び出しによって置き換えられる要素にイベントリスナーをアタッチしている可能性があります。

その場合は、新しい要素が置き換えられる要素とまったく同じであっても、イベントハンドラーを再作成して新しい要素に再アタッチする必要があります。

于 2009-08-23T14:34:14.730 に答える
1

OK、ここに少しコードを投稿します。しかし、はい、イベントリスナーは要素にアタッチされています。

検索フィールドからイベントを探し、そのフィールドやその他のフォーム要素からデータを収集し、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);
        }
    });
},

...});
于 2009-08-23T14:50:39.757 に答える