2016-11-29 86 views
0

我试图将javascript中的值放入Yii2中的表单动作中 是否有可能? 更具体地说,我需要对在dropdownList中选择的每个选项进行URL更改。将javascript值传递给Yii2中的表单动作URL

形式的意见/ site.php

$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/"; 
} 

所以,我来救从JS所选择的选项的值,但我需要把它放在这里 'pk' 文件>'值'

其中值是#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