2009-08-23 7 views
0

私は、Prototype/Scriptaculousでphp/mysqlとjavascriptを使ってアプリケーションを構築しています。JavaScriptをResonseTextデータで操作する方法

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

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

私はそのテーブルに対して動作するjavascriptを持っています。これは、ページの下部にスクリプトタグを介して標準的な方法でロードされています。

問題は、デフォルトのデータ(ページにロードされている部分)のみで問題が発生し、検索によって表のデータが更新されるとスクリプトが機能しなくなります。それはもともとページに読み込まれて以来、まだ動作しますが、私のスクリプトはページの更新や新しいデータを認識していないようです。

これを動作させるにはどうすればよいですか?すべてのAjaxコールにスクリプトを含める必要がありますか?

おかげ リッチ

答えて

1

は、関連するコードを投稿するには役立つだろうが、あなたは最も可能性の高いAJAX呼び出しに置き換えられている要素にイベントリスナーを添付しています。

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

1

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

ここでは、検索フィールドからイベントを探し、そのフィールドや他のフォーム要素からデータを収集し、this.paramsに設定するJavascriptクラスを作成しました。

データが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); 
     } 
    }); 
}, 

...}); 
+0

元の質問を編集して詳細を追加し、回答を追加しないでください。 – Triptych

関連する問題