2011-12-08 18 views
2

私はいくつかの複数の選択ボックスで選択された選択に基づいて(SQLを使用して)テーブルを構築しようとしています。ここに私のjavascript/jqueryのコードは次のとおりです。複数選択の戻り値

function make_table(whichButton) 
{ 
      console.log("Whichbotton = " + whichButton); 
      //var prog = $("#program option:selected").val().join(" "); 
      var prog = $("#program").val() || []; 
      console.log("prog first= " + prog); 
      prog = prog.join(" "); 
      console.log("prog second= " + prog); 
      var sch = $("#school").val() || []; 
      sch = sch.join(" "); 
      var trm = $("#term").val() || []; 
      trm = trm.join(" "); 
      var ext = $("#extension").val() || []; 
      ext = ext.join(" "); 

私の理解では、valは()すべての選択の配列、および参加機能は、セパレータを使用して値を分離する文字列を返す取得するということです。しかし、何かが正しくない。 console.logは、結合を行った後でも、変数progに値(または単に空白)がないことを示しています。なにが問題ですか?

また、私は各変数を).val()|| []; ...これは、jqueryサイトのサンプルがどのようにそれを行ったのかという理由からです。しかし、それはどういう意味ですか? jqueryの仕様では、配列が空の場合、デフォルト値としてnullが返されます。 []平均?

答えて

2

|| []は、valがnullを返した場合、代わりに空の配列を要素として選択することを意味します。

それは同じ意味:あなたの問題のよう

if ($("#term").val() == null){ 
    trm = [] 
} 
else{ 
    trm = $("#term").val(); 
} 

を、あなたは)(あなたのvalを確認する必要があり、正しく戻ってきています。 $( "#term").val()をロギングして、返り値を返すかどうかを確認してください。そうであれば、何か他のところで何か悪いことをしているのを知っていますが、私は何も手を出すことはありません。

+0

ありがとうございます。しかし、私はまだあなたがまだ私に空白の返信を与えるログをやって、問題を抱えている... – user1015214

+0

あなたはあなたのhtmlを再確認する必要があります。多分あなたは同じIDの複数をページに持っていますか? – Evan

1

これは、デフォルト値を設定する方法です、short circuit evaluationと呼ばれる:

var something = null || []; // something equals [] 

そうも[].join(" "); // equals "" <- empty string

+0

変数 "something"がdefalt値と等しいのはいつですか?なぜそれが "null"と等しくないのでしょうか? – user1015214

+0

JavaScriptでnullがfalseであるため、「false OR something」は常に「something」 – Joe