2016-11-29 5 views
0

Yii2のフォームアクションにjavascriptの値を入れようとしています 可能ですか? 具体的には、dropdownListで選択されているオプションごとにURLを変更する必要があります。だから、ビュー/ site.phpYii2のフォームアクションURLにjavacriptの値を渡す

$form = ActiveForm::begin([ 
     'id' => 'form', 
     'method' => 'POST', 
     'action' => Url::to(['programas/'.Tours::findOne(['pk' => ])->programa]), 
]); 

<?= $form->field(new \app\models\Tours(), 'nombre')->dropDownList([], 
    [ 
     'prompt' => 'Programa', 
     'id' => 'child1_child2', 
     'onchange' => 'updateValue(this.value)', 
    ] 
)->label(false); ?> 

JSファイル

function updateValue(val){ 
    x = document.getElementById("test").value; 
    // document.getElementById("form").action = "programas/"; 
} 

フォーム、 'PK' 私はJSで選択されたオプションの値を救うが、私はここでそれを配置する必要があります=> 'value'

ここで、valueは#child1_child2選択されたオプション値です。助けのための

'action' => Url::to(['programas/'.Tours::findOne(['pk' => ])->programa]) 

感謝。

答えて

1

あなたは、いくつかの修正では、次のアプローチのいずれかを使用できます。

//pk => programa 
$data = [ 
    1 => 'programa1', 
    2 => 'programa2', 
    3 => 'programa3', 
]; 

1)使用JS

<?= $form->field(new \app\models\Tours(), 'nombre')->dropDownList($data, ['prompt' => 'Programa'])->label(false); ?> 

JS

$this->registerJs(' 
$("#dropdownID").change(function() { 
    var text = $("#dropdownID option:selected").text(); 
    $("#formID").attr("action", "/pathtoproject/programas/" + text); 
}); 
', \yii\web\View::POS_END); 

2)の使用は、 Ajaxのコール

<?= $form->field(new \app\models\Tours(), 'nombre')->dropDownList($data, [ 
    'prompt' => 'Programa', 
    'onchange'=> '$.get("'.Url::toRoute('get-action').'", { id: $(this).val() }) 
     .done(function(data) { 
      $("#formID").attr("action", data); 
     } 
    );' 
])->label(false); ?> 

コントローラ

public function actionGetAction($id) 
{ 
    $name = Tours::findOne(['pk' => $id])->programa]; 
    echo \yii\helpers\Url::to(['programas/'.$name]); 
} 
+0

はねえ、おかげでこれは多くのことを助けて:) !! – Rugleh

関連する問題