簡體   English   中英

dojo 過濾選擇與 ajax 調用 - 如何使用返回值填充 select 框

[英]dojo filteringselect with ajax call - how to populate select box with returned values

我想我已經完成了困難的事情。 我有一個帶有 2 個過濾 select 框的表格。 第一個由 3 個值的硬編碼數組填充(稍后將變為動態)。 當我 select 值時,我有一個 json-rpc 調用 go 到我的數據庫並返回我想要的第二個框的值。 把它想象成選擇了美國的國家——數據庫只返回美國城市來填充第二個框。

這是我的 Javascript 填充第二個文本框:

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;
            }
        }    
    );
}

這是用於創建表單的 php:

$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');

我嘗試了幾種不同的設置值的方法,但它似乎不會改變......結果 object 看起來像這樣:

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

我想要的只是"Test1"作為值,我確定這很簡單,但就是看不到它!

我認為您需要做的是將您的電話更改為

document.getElementById('subCategoryId')

調用檢索您的實際 dijit 小部件的實例:

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

document.getElementByIddojo.byId只返回元素的物理 dom 節點,而不是實際的 javascript 小部件 object。 您想改用dijit.byId

然后,使用該小部件,您可以使用小部件的set function 來設置其屬性

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

查看FilteringSelect API 文檔了解更多信息。

此外,要根據第一個菜單中的更改向 FilteringSelect 添加新選項,您可能需要查看 FilteringSelect 的繼承方法addOption

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM