2011-03-01 7 views
1

よりも新しいものでは働いていない私はjQueryとAjaxのを使用して自動投入ボックスに、このチュートリアルを通過されています: http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/自動投入セレクトボックス - 1.3.2

とデモで作者はjQueryバージョン1.2.3を実行しています。ローカルでは、jQuery 1.3.2で関数を実行することができました。それ以上のバージョンでは動作していません(2番目のボックスには入力されていません)。ここで

は、jQueryのコードです:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" charset="utf-8"> 
$(function(){ 
    $("select#ctlJob").change(function(){ 
    $.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
     var options = ''; 
     for (var i = 0; i < j.length; i++) { 
     options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>'; 
     } 
     $("select#ctlPerson").html(options); 
    }) 
    }) 
}) 
</script> 

これは、HTMLコードです:

<form action="/select_demo.php"> 
    <label for="ctlJob">Job Function:</label> 
    <select name="id" id="ctlJob"> 
    <option value="1">Managers</option> 
    <option value="2">Team Leaders</option> 
    <option value="3">Developers</option> 
    </select> 
    <noscript> 
    <input type="submit" name="action" value="Load Individuals" /> 
    </noscript> 
    <label for="ctlPerson">Individual:</label> 
    <select name="person_id" id="ctlPerson"> 
    <option value="1">Mark P</option> 
    <option value="2">Andy Y</option> 
    <option value="3">Richard B</option> 
    </select> 
<input type="submit" name="action" value="Book" /> 
</form> 

これは、サーバー側のPHPです:

<?php 
if ($_GET['id'] == 1) { 
    echo <<<HERE_DOC 
[ {optionValue: 0, optionDisplay: 'Mark'}, {optionValue:1, optionDisplay: 'Andy'}, {optionValue:2, optionDisplay: 'Richard'}] 
HERE_DOC; 
} else if ($_GET['id'] == 2) { 
    echo <<<HERE_DOC 
[{optionValue:10, optionDisplay: 'Remy'}, {optionValue:11, optionDisplay: 'Arif'}, {optionValue:12, optionDisplay: 'JC'}] 
HERE_DOC; 
} else if ($_GET['id'] == 3) { 
    echo <<<HERE_DOC 
[{optionValue:20, optionDisplay: 'Aidan'}, {optionValue:21, optionDisplay:'Russell'}] 
HERE_DOC; 
}?> 

どのように私はこれを書き換えてくださいそれは、例えばjQuery 1.5で動作しますか?

ありがとうございました!

EDIT:Markのソリューションがうまくいきました。これはすべてのHTMLファイルであり、保存されたjsonファイルを読むのに比較的簡単に適応できるはずです。

<html> 
    <head> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <title>Select test</title> 
     <script type="text/javascript" src="jquery.js"></script> 
     <script type="text/javascript"> 
       $(function(){ 
        var data = [ 
           [ 
            {optionValue: 0,optionDisplay: 'Mark'}, 
            {optionValue: 1,optionDisplay: 'Andy'}, 
            {optionValue: 2,optionDisplay: 'Richard'} 
            ], 
           [ 
            {optionValue: 10,optionDisplay: 'Remy'}, 
            {optionValue: 11,optionDisplay: 'Arif'}, 
            {optionValue: 12, optionDisplay: 'JC'} 
           ], 
           [ 
            {optionValue: 20,optionDisplay: 'Aidan'}, 
            {optionValue: 21,optionDisplay: 'Russell'} 
            ] 
           ]; 


        $("#ctlJob").change(function() { 
         var $persons = $("#ctlPerson").empty(); 
         $.each(data[$(this).val() - 1], function() { 
          $persons.append("<option value=" + this.optionValue + ">" + this.optionDisplay + "</option>"); 
         }); 
        }); 
       })  
       </script> 
    </head> 

    <body> 
      <form action="/select_demo.php"> 
       <label for="ctlJob">Job Function:</label> 
       <select name="id" id="ctlJob"> 
        <option value="1">Managers</option> 
        <option value="2">Team Leaders</option> 
        <option value="3">Developers</option> 
       </select> 
       <noscript> 
        <input type="submit" name="action" value="Load Individuals" /> 
       </noscript> 
       <label for="ctlPerson">Individual:</label> 
       <select name="person_id" id="ctlPerson"> 
        <option value="1">Mark P</option> 
        <option value="2">Andy Y</option> 
        <option value="3">Richard B</option> 
       </select> 
       <input type="submit" name="action" value="Book" /> 
      </form> 
    </body> 
</html> 

答えて

1

あなたのJSONを想定するとは、あなたができるトンである必要があり、有効ですo以下を使用してください:

jsfiddleの質問のマークアップを使用するように更新されました。

+0

これは心配です...この**は**完全にjsfiddleで動作しますが、マシンにjsfiddleコードをコピーしても動作しません。オリジナルの投稿をチェックしますか(HTMLファイル全体を追加するために編集しました)?私はおそらく何か間違っている。 – aramaz

+0

元の投稿の最後のHTMLファイルのスクリプトに '$(function(){'がありませんでした)ありがとうございました – aramaz

+0

助けができてうれしいです。 –

0

試してみてください。

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" charset="utf-8"> 
$(function(){ 
    $("select#ctlJob").change(function(){ 
    $.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
     for (var i = 0; i < j.length; i++) { 
     $('<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>').appendTo($("select#ctlPerson")); 
     } 
    }) 
    }) 
}) 
</script> 

EDIT:別のアプローチ

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" charset="utf-8"> 
$(function(){ 
    $("select#ctlJob").change(function(){ 
    $.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
     var options = $("select#ctlPerson").attr('options'); 
     for (var i = 0; i < j.length; i++) { 
     options[options.length] = new Option(j[i].optionDisplay, j[i].optionValue); 
     } 
    }) 
    }) 
}) 
</script> 

クレジットhttp://www.electrictoolbox.com/jquery-add-option-select-jquery/

+0

Hm、動作しない、1.3と試して、1.4。 1.5。 – aramaz

+0

エラーが発生しますか? –

+0

1.5。1「属性セレクタで予期しないトークン: '!'」という警告が表示されます。それ以外にはエラーはなく、2番目のボックスには入力されません。 – aramaz

0

Aramaz @EditはJSONを使用しないため動作します。この問題は、jqueryでJSONを解析する方法が1.4で変更され、ブラウザのネイティブJSONパーサーを使用しているためです。したがって、すべてのJSONプロパティと値は、応答が正しく解析されるように二重引用符(つまり有効なJSON形式)で囲みます。

ので、この名前と値のアレイが正しく解析されます

[{ "optionValue": "0"、 "optionDisplay": "マーク"}、{ "optionValueは": "1"、 "optionDisplay" : "アンディ"}、{ "optionValue": "2"、 "optionDisplay": "リチャード"}]これは新しいjQueryのバージョンによって正しく解析されない

[{optionValue:0 、optionDisplay: 'Mark'}、{optionValue:1、optionDisplay: 'Andy'}、{optionValue:2、optionDisplay: 'Richard'}]

-1
<html><body> 
<head> 

<script type="text/javascript" src="/js/jquery-1.10.2.js"></script> 



<script type="text/javascript" charset="utf-8"> 
$(function(){ 
$("select#ctlJob").change(function(){ 
$.getJSON("/api_test.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
    var options = ''; 
    for (var i = 0; i < j.length; i++) { 
    options += '<option value="' + j[i].optionValue + '">' +  j[i].optionDisplay + '</option>'; 
    } 
    $("select#ctlPerson").html(options); 
}) 
}) 
}) 
</script> 
<!-- [{optionValue:20, optionDisplay: 'Aidan'}, {optionValue:21, optionDisplay:'Russell'}] --> 

<script type="text/javascript"> 
      $(function(){ 
       var data = [ 
          [ 
           {optionValue: 0,optionDisplay: 'Mark'}, 
           {optionValue: 1,optionDisplay: 'Andy'}, 
           {optionValue: 2,optionDisplay: 'Richard'} 
           ], 
          [ 
           {optionValue: 10,optionDisplay: 'Remy'}, 
           {optionValue: 11,optionDisplay: 'Arif'}, 
           {optionValue: 12, optionDisplay: 'JC'} 
          ], 
          [ 
           {optionValue: 20,optionDisplay: 'Aidan'}, 
           {optionValue: 21,optionDisplay: 'Russell'} 
           ] 
          ]; 


      $("select#ctlJob").change(function() { 
      var $persons = $("#ctlPerson").empty(); 
      $.each(data[$(this).val() - 1], function() { 
      $persons.append("<option value=" + this.optionValue + ">" + this.optionDisplay + "</option>"); 
        }); 
       }); 
      })  
      </script> 
</head> 
<form action="api_test.php"> 
<label for="ctlJob">Job Function:</label> 
<select name="id" id="ctlJob"> 
<option value="1">Managers</option> 
<option value="2">Team Leaders</option> 
<option value="3">Developers</option> 
</select> 
<noscript> 
<input type="submit" name="action" value="Load Individuals" /> 
</noscript> 
<label for="ctlPerson">Individual:</label> 
<select name="person_id" id="ctlPerson"> 
<option value="1">Mark P</option> 
<option value="2">Andy Y</option> 
<option value="3">Richard B</option> 
</select> 
<input type="submit" name="action" value="Book" /></form> 
</body></html> 
+0

コードを使用してくださいコードのスニペット(ツールバーの[<文字列>]アイコン)を使用すると、コードスニペットを整形しやすくすることができます – Sreekanth