2016-05-25 10 views
1

私は以下のように自分の.jadeファイルで定義したドロップダウンリストにエントリを追加しようとしています。Ajaxを使用してJadeのドロップダウンリストに追加する

extends layout 

block content 
    script(src='http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js') 
    script(src='/javascripts/addsystem.js') 
    h1= title 
    p Testing 


    select#allSystems 

は、そして、私のAjaxの方法は、以下のようになります。

var select = $('#allSystems'); 
console.log("Runing script") 


$.ajax({ 
    url: '/submit/getAllSystems', 
    dataType:'JSON', 
    success:function(data){ 

    $.each(test.system, function(key, val) { 
     select.append('<option id="' + val.id + '">' + val.name + '</option>'); 
    }) 
    } 
}); 

Ajaxのスクリプトはジェイドファイルに含まれてJSファイルに位置しています。 (JqueryはJadeファイルにも含まれています)。

すべてが正常に動作しているようですが、追加を除いては問題ありません。私。コンソール・ログには良好なデータがすべて表示され、Ajaxスクリプトにselectオブジェクトを出力すると、ブラウザはそれをHTML要素として認識します。

ランニング印刷 "はconsole.log(選択)を;"、Firefoxのコンソールは次のことを示しています

Object { context: HTMLDocument → submit, selector: "#allSystems" } 

私が間違ってやっている任意のアイデアを?

+1

ジェイドファイルまたはレンダリングされたHTMLのどちらでも投稿できますか? – Paul

+1

DOMの準備が整う前に '$( '#allSystems')'を実行していますか? –

+1

私はちょうど私の答えに追加しようとしていたことがあります。 – Paul

答えて

1

ジェイドは、HTMLをレンダリングするためにデータとともにコンパイルして実行する必要があるテンプレート言語です。 JQueryはそれを自動的には行いません。そのため、あなたのコメントアウトされた試行はselect.appendに失敗しました。

自分でHTMLを構築することはできます(ただし、コードが醜いですが、文字列の連結は嫌いです)。しかし、あなたはそれを.appendToに変更しました。これはあなたのselectオブジェクトを取り出して、optionに追加します。これはあなたが望むものではないと思います。それでも解決しない場合は

select.append('<option id="' + val.id + '">' + val.name + '</option>'); 

、そしてあなたにselect変数を取得し、あなたのセレクタで何かがあります:

はこの打撃を与えます。

* EDIT *私はあなたがDOMの残りの部分の前に、スクリプトをロードしているあなたのジェイドに気づく 。 addsystem.jsの内容があなたの記述どおりであれば、データを取り出してまだ存在しないDOMノードに追加しようとしています。

$(function(){ /** your code **/ }) 

DOMが完全に読み込まれた後にjQueryのメソッドを実行する方法の略です。

+0

申し訳ありませんが、私は正しいと思ったものがうまくいかなかったので、私はちょうどランダムなものをテストしていたコードの一時的なバージョンを含めました。私は自分の投稿を編集しました。現在のバージョンは、私が何か不足していない限り、あなたが提案しているものと一致するようです。 –

+0

セレクタに関するいくつかの情報が含まれます。なぜなら、それはあなたが示唆したように問題であるかもしれないからです。私はすぐに質問を編集します。 –

+1

いいえ、あなたが見せているものは上手く見えます。あなたのコメントから、テストオブジェクトにオブジェクトのコレクションである 'system'プロパティがあると仮定すると、ループは機能するはずです。あなたはajax呼び出しが実行された後、DOMで何を見ていますか?不正なオプションタグ、空タグ、何も取得していませんか?コンソールにエラーがありますか? – Paul

関連する問題