0

ビューでは、次のようなhtmlselect要素があります

<select id="g" name="g" style="width: 160px; height: 26px; background-color: white; border: 2px solid silver; padding: 0px 4px 0px 4px; box-shadow: 4px #333333;">
    <option value="value1">Value1</option>
    <option value="value2">Value2</option>
    <option value="value3">Value3</option>
    <option value="value4">Value4</option>
</select>

コントローラーでは、次のようなアクションがあります

    public function actionGetCategories($genre) {
    if(isset($genre)) {

        $c = new Category();            

        return CJSON::encode($c->findAll(array(
            'select'=>'category',
            'condition'=>'genre = \'' . $genre .'\''
        )));
    } else {
        return 0;
    }

したがって、ユーザーがselect要素を変更すると、アプリケーションが「c」という名前の別のselect要素の要素リストを自動的に変更するようにしたいと思います。私は次のJSコードでこれを行おうとしました:

    <script type="text/javascript">
    $(function () {
        $("#g").change(function () {
            var items = "<option>All categories</option>";
            var self = $(this);

            $.getJSON("<?php echo $this->createUrl('site/getcategories', array('genre'=>'value')) ?>", 
                function (data) {
                    $.each(data, function (index, item) {
                        items += "<option>" + item + "</option>";
                    });
                $("#c").html(items);
            });
        });
    });
    </script>

しかし、動作しません!また、完全なルートURLを「http://localhost/project/index.php?r=site/getcategories&genre=value」として.getJSON urlパラメーターを変更しようとしましたが、何も変更しませんでした。誰か私を助けることができますか?

ありがとう。

4

1 に答える 1

1

CActiveForm ウィジェットを使用してフォームまたは CHtml ヘルパーを作成する場合、JavaScript コードを使用せずにこれを行うことができます。次の例を見てください。

echo $form->dropDownList($model, 'company_id', $model->getCompanyProjectOptions(),array('empty'=>'--select company--','ajax'=>array
                    (
                        'url' => CController::createUrl('/project/updateProjects'),   //only if you want an action here
                        'type' => 'get',
                        'data' =>  array('id' => 'js:$(this).val()'),
                        'update' => '#projects-list',   //or any other jQuery selector
                    )));

コントローラーの updateProjects アクションは次のようになります。

public function ActionUpdateProjects($id) {
        $model = new Project;
        $criteria = new CDbCriteria();
        $criteria -> addCondition('company_id=' . (int)$id);
        $criteria -> scopes = array('noRemove', 'noArchive');
        $criteria -> order = 'prj_nom';
        $data = Project::model() -> findAll($criteria);
        if (is_array($data) && !empty($data)) {
            echo CHtml::activeLabel($model, 'prj_parent_id');
            echo $data = CHtml::activeDropDownList($model, 'prj_parent_id', CHtml::listData($data, 'prj_id', 'prj_name'), array('empty' => '-- Select parent --'));
        }
    }

また、accessRule 関数でこのアクションに許可を与えないでください。

http://www.yiiframework.com/wiki/24/

お役に立てれば

于 2012-12-26T19:17:16.977 に答える