2011-08-11 7 views
0

私は難しいことをやったと思います。私は2つのフィルタリング選択ボックスを持つフォームを持っています。最初のものは、3つの値のハードコードされた配列によって設定されます(後で動的になります)。値を選択すると、json-rpc呼び出しがデータベースに送られ、2番目のボックスに必要な値が返されます。それはアメリカが選んだ国のように考える - データベースは2番目のボックスを埋めるためにアメリカの都市だけを返します。dojo filtering ajaxコールで選択する - 返された値をセレクトボックスに取り込む方法

これは、2番目のテキストボックスを移入するために私のJavascriptです:これは、フォームを作成するためのPHPで

function category_changed() 
{ 
    var store = directoryBroker.getSubCategorys(document.getElementById('categoryId').value); 
    store.addCallback(
     function (response) 
     { 
      var result = dojo.eval("(" + response + ")"); 
      if (typeof(result)!='undefined') 
      { 
       document.getElementById('subCategoryId').disabled = false; 
       document.getElementById('subCategoryId').value = result[0].id; 
      } 
     }  
    ); 
} 

$category = new Zend_Dojo_Form_Element_FilteringSelect('categoryId'); 
    $category 
     ->addMultiOption('a', '-- Please Select --') 
     ->addMultiOptions($directoryModel->getAllCategorysForSelect()) 
     ->setValue('a') 
     ->setRequired(true) 
     ->setAttribs(
      array(
       'style' => 'width: 400px', 
       'onchange' => 'JavaScript: category_changed();' 
      ) 
     ) 
     ->setLabel("Category:") 
     ->addFilter('StringTrim') 
     ->addValidator('int'); 


    $subCategory = new Zend_Dojo_Form_Element_FilteringSelect('subCategoryId'); 
    $subCategory 
     ->addMultiOption('-1', '-- Select Category First --') 
     ->setRequired(true) 
     ->setAttribs(
      array(
       'disabled' => 'disabled', 
       'onchange' => 'JavaScript: subCategory_changed();', 
       'style' => 'width: 400px;' 

      ) 
     ) 
     ->setLabel("Sub Category:") 
     ->addValidator('int'); 

私は値を設定するいくつかの異なる方法を試してみましたが、それはちょうど変わっていないようです...結果オブジェクトはこのようになります:

result[0] "[{"name":"Test1","id":"1"}]" 

すべて私はNTの値は"Test1"です。私はそれが何かシンプルだと確信していますが、それを見ることはできません!唯一の物理を返す

var secondaryFilteringSelect = dijit.byId('subCategoryId'); 

document.getElementByIddojo.byId:私はあなたが何をする必要があるかと思います

+0

を見てみたいと思うでしょうである「という結果[0] ... "行?あなたは、あなたのサーバーがそのような場合には何かを返せないと確信していますか? – hugomg

+0

result = dojo.eval( "(" + response + ")")これはサーバーから返されたjson文字列です。何がもっと元気? – Pjn2020

+0

JSONの外観の例を挙げることはできますか?私はあなたをよく理解していないと思う。 – hugomg

答えて

1

は、実際のdijitウィジェットのインスタンスを取得するコールに

document.getElementById('subCategoryId') 

にあなたの呼び出しを変更で実際のjavascriptウィジェットオブジェクトではなく要素のDOMノードです。代わりにdijit.byIdを使用します。

すると、そのウィジェットで、あなたはより多くの情報のためFilteringSelect API Docsを見てみましょう、そのプロパティ

secondaryFilteringSelect.set('disabled', false); 
secondaryFilteringSelect.set('value', result[0].id); 

設定を設定するウィジェットのset機能を使用することができます。サーバーの応答は

はまた、最初のメニューの変化に基づいてFilteringSelectのに新しいオプションを追加するために、あなたはおそらくFilteringSelectのの継承されたメソッドaddOption

+0

これを試して、取得secondaryFilteringSelectは未定義です – Pjn2020