2011-01-10 16 views
1
<!DOCTYPE html> 
<html> 
    <script type="text/javascript" src="../jquery-1.4.4.min.js" /> 
    <script type="text/javascript">   
     function click(){ 
      var select = document.getElementById("select"); 
      var json = [["Deutsch", "de-DE"], ["US Englisch", "en-US"]]; 
      json = JSON.parse(json); 
      select.options.length = 0; 
      for(var i=0; i<json.length; i++) { 
       $("#select").append(new Option(json[i][0], json[i][1], false, false)); 
      } 
     } 
    </script> 

    <body> 
     <select id="select"></select> 
     <input type="button" onclick="click()" /> 
    </body> 
</html> 

私は選択要素にオプションを追加しようとしていますが、役に立たないです。選択するオプションを動的に追加できない

+0

jQueryを実際に使用していないので、その行を除いて、まっすぐJSに行かないのはなぜですか? – hunter

答えて

3

実際にJSONデータではないため、これは機能しません。

var json = [["Deutsch", "de-DE"], ["US Englisch", "en-US"]]; 
    // json = JSON.parse(json); 
    // ^-----Eliminate the second line. 

また、あなたがメソッド名にclickを使用してはならない。それはjavascript配列です。それはいくつかのブラウザで干渉します。

実施例:http://jsfiddle.net/hdX84/

+0

実例をありがとう!それはjsfiddleで動作しましたが、コードをそのままコピーしても機能しませんでした。ここに他の問題はありますか?私はこれをテストするためにクロムを使用しています。 – lowerkey

+0

@Joshua:インラインの 'onclick'属性でメソッドの名前を変更したことを覚えましたか?この例では、一部のブラウザで 'click'を使用すると失敗するため、' click'から 'click_me'に変更しました。 – user113716

+0

私はoption-adding-triggerのためにclickを$(document).ready(...)に置き換えました。 – lowerkey

1

これは間違っている:

var json = [["Deutsch", "de-DE"], ["US Englisch", "en-US"]]; 
json = JSON.parse(json); 

あなたはJSONを持っていません。配列のの配列があります。一重引用符で囲まれている場合(つまり、文字列の場合)、JSONのみになります。

var data = [["Deutsch", "de-DE"], ["US Englisch", "en-US"]]; 
for(var i=0; i<data.length; i++){ 
    $("#select").append($('<option />',{value: json[i][1], text: json[i][0]})); 
} 
2

$( '選択')は常にDOMを検索しまうので、私は、より効率のために

var mySel = $('#select')[0]; 
for(var i=0; i<json.length; i++){ 
     mySel.append(whatever); 
    } 

にしてください。 10のエントリは大したことではありませんが、大きなページの場合は、効率的な作業を から始めてみてください。

+1

DOMオブジェクトで 'append()'を呼び出すことはできません。これはjQueryメソッドです。 jQueryセレクタのget [0] 'を実行するとDOM要素が返されます – hunter

+0

これは実際には問題を扱っていないため、コメントとして投稿する必要があります。私はまだコメントするのに十分な担当者がいないことを理解していますが、あなたはAnswersセクションを悪用すべきではありません。あなたはコメントするのに50人の担当者しか必要としないので、それは長くかかりません。 – user113716

+0

ok、thx。私は次回にそうすることを忘れないでください。 – TiGoRn

関連する問題