2009-06-19 4 views
2

カテゴリを選択するには、ドロップダウンリストを使用します。各リストには1つのレベルのカテゴリが含まれています。つまり、トップレベル、サブ、サブサブ、サブサブなどです。すべてのレベルは、スクリプトgetcat.php<select>オブジェクト)を使って動的に取得されます。PHPの動的フォーム要素からjQueryの変更イベントを取得するにはどうすればよいですか?

これまでの検索は、次のコードで動作します。しかし、それはフォームなので、最後に選択した値を取得したいので、カテゴリIDを持つことができます。これは私のために働いていません。私は$("select:last option:selected")を試しましたが、それは新しく挿入された要素では機能しません。

カテゴリを選択した後、ユーザが自分のサブカテゴリを(選択したカテゴリ内で)作成できる場所に入力フィールドが表示されている必要があります。これも、新しい要素を扱っていません。

今、私は.liveでプレイしようとしましたが、変更イベントはサポートされていません。あなたはそれを改善する方法についてのヒントを持っていますか?あなたが見ることができるように、それは美しさではありません、しかし

$("select").bind("change", function(){ 
    $(this).nextAll().remove(); 
    var value = $(this).val(); 
    $("#currentcat").val(value); 
    if($("select:last option:selected").hasClass('makenew')) { 
     $("#newcat").show(); 
    } 
    else if($("select:last option:selected").hasClass('disabled')) { } 
    else { 
    $.get("getcat.php", { c: value }, 
     function(data){ 
      $("#getcats").append(data); 
     }); 
    $("#newcat").hide(); 
    }  
}); 

は現在、私は次のコードを持っています。

答えて

2

あなたは新しい選択ボックスにonchangeイベントを再バインドしていますか?

+0

いいえ!私はこれが私がする必要があることを理解しました。これを行う方法に関するヒントはありますか?私はlivequeryを試みたが、私はそれを働かせることができない.. thxの助けを! –

+0

心配しないで、それは動作します!先端のためのthx! –

1

あなたが異なるブラウザ間でDOMと仕事にバインドする新しい<option>秒をしたい場合は、私はそうのようなのdocument.createElementとdocument.createTextNodeを使用して、あなたの選択にそれらを追加することをお勧め:

var opt = document.createElement('option'); 
opt.value = "someValue"; 
opt.appendChild(document.createTextNode("someText")); 
$('#currentcat').append(opt); 

だからではなく、 $ .getを使用する場合は、おそらく$.getJSONを使用して、選択に追加するオプションの値とテキスト属性を含むJSONオブジェクトを取得する必要があります。サーバーから取得したJSONオブジェクトは、次のようになります。

$.getJSON("getcat.php", { c: value }, function(json) { 
    var $select = $('<select></select>).attr('id','currentcat').attr('name','currentcat').hide(); 
    $.each(json.options, function(i, item) { 
     var opt = document.createElement('option'); 
     opt.value = item.value; 
     opt.appendChild(document.createTextNode(item.text)); 
     $('#currentcat').append(opt);   
    }); 
    $("#newcat").hide(); 
    $('#someDiv').append($select).show(); 
}); 

上記テストし、あなたの質問の私の理解を反映していません:オブジェクトの上

   { "options" : [   
                                    { "text" : "Fishing",  // First element 
                                      "value"  : "5" }, 
                                    
                                    { "text" : "Skiing",  // Second Element 
                                      "value"  : "70" } 
                              ] 
                } 

反復処理は次のようになります。希望が役立ちます。

+0

thx karim!意味あり。しかし、jsonの出力もかなり実用的です。これはちょうどオプションを作成する、私はそうですか?私はそれも選択要素を作成したい。したがって、要素 'select'を作成し、次に$( '#currentcat')。next()。append(opt)?ヒント? thx .. –

+0

はい、あなたは正しいです。すみませんでした。私はそれをテストしていないことを念頭において、私の編集を見てください。基本的には、非表示のselect要素をその場で作成し、新しく作成したオプションを追加してからsomeDivコンテナに追加します(最後に表示します)。希望は意味をなさない。編集のための – karim79

+0

thx。はい、それは理にかなって、私はそれを働かせることができませんでした。代わりに、私はlivequeryを単純に使用して、すべてのselect要素をバインドしました。それは今働く!どうも! –

関連する問題