Yii2 dropdown2 выбран в зависимости от drop1 - PullRequest
0 голосов
/ 14 января 2019

У меня есть два стандартных выпадающих списка:

$form->field($model, 'typ_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plra::find()->all(), 'id', 'name'),
);

и

$form->field($model, 'tol_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plratol::find()->all(), 'id', 'name')
);

и я хотел бы сделать одно определенное значение выбранным (практически как предложение, по умолчанию) в раскрывающемся списке tol_id, если выбрано одно определенное значение typ_id. В основном два раскрывающихся списка независимы. В качестве обходного пути для достижения того, что я хочу, я могу заставить его работать как зависимый выпадающий список:

$form->field($model, 'typ_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plra::find()->all(), 'id', 'name'), [
        'onchange' => '$.post("' . \Yii::$app->urlManager->createUrl('plra/listtol?typ_id=') . '"+$(this).val(), function(data) {$("select#tol_id").html(data);});',
    ]
);

и

$form->field($model, 'tol_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plratol::find()->all(), 'id', 'name'), [
        'id' => 'tol_id'
    ]
);

Контроллер:

public function actionListtol($typ_id) {
    if ($typ_id == 2) {
        $plratol = Plratol::find()->where(['typ_id' => 2])->one();

        echo "<option value='" . $plratol->id . "'>" . $plratol->name . "</option>";
    } else {
        $plratols = Plratol::find()->where(['typ_id' => NULL])->all();

        echo "<option>Select</option>";
        foreach ($plratols as $plratol) {
            echo "<option value='" . $plratol->id . "'>" . $plratol->name . "</option>";
        }
    }
}

но мне интересно, есть ли более простой способ, возможно, mit js для такой простой зависимости / сценария? Если да, не могли бы вы предоставить пример кода, потому что, к сожалению, я не знаком с js.

Я бы хотел решить эту проблему без расширения Kartik DepDrop.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Хотя у вас нет кода для ссылки. Если я правильно понимаю, ваш зависимый выпадающий список не будет работать при нагрузке, если вы передадите ему выбранное значение. Вы все еще можете обойти это с JS.

 $( document ).ready( function(){
        e = $('#parent'); // replace with your elements name
        e.change();
     }); 

Приведенный выше код вызовет событие change, и любое указанное вами значение будет использовано в зависимом раскрывающемся списке.

0 голосов
/ 14 января 2019

Вы можете использовать чистый JavaScript или JQuery,

Добавьте событие onchange() в 1-й выпадающий список и с помощью функции ajax in onchange() получите необходимое значение 2-го выпадающего списка и установите его html.

...