使用ajax调用的Dojo filteringselect -如何用返回值填充选择框

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

本文关键字:返回值 何用 填充 选择 调用 ajax Dojo filteringselect 使用      更新时间:2023-09-26

我想我已经把困难的事情做完了。我有一个2筛选选择框的形式。第一个是由一个包含3个值的硬编码数组填充(稍后将动态填充)。当我选择值时,我有一个json-rpc调用到我的数据库并返回我想要的第二个框的值。可以把它想象成国家选择美国-数据库只返回美国城市来填充第二个框。

这是我用来填充第二个文本框的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');

我已经尝试了几种不同的方法来设置值,但它似乎不会改变…结果对象如下所示:

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

所有我想要的是"Test1"的值,我相信这是简单的东西,但只是看不到它!

我认为你需要做的是将调用更改为

document.getElementById('subCategoryId')

转换为一个调用,该调用检索实际dijit小部件的实例:

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

document.getElementByIddojo.byId只返回元素的物理dom节点,而不是实际的javascript小部件对象。您想使用dijit.byId代替。

然后,使用该小部件,您可以使用该小部件的set函数来设置其属性

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

查看FilteringSelect API文档获取更多信息。

此外,为了根据第一个菜单中的更改向FilteringSelect添加新选项,您可能需要查看FilteringSelect的继承方法addOption