问题就是这样,昨天我问道 How to add fields to activeform with js/jQuery in Yii2?
现在我需要添加一个下拉菜单,这不是一回事......
我有这个:
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use app\models\User;
use app\models\ContactType;
$cntcttp = new ContactType;
$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
. Html::textInput("contacto","",['placeholder'=>"contacto"])
. '\');'
. '})');
?>
<?php $form = ActiveForm::begin(); ?>
<div id="dynamicInput"></div>
<?= Html::activeDropDownList($cntcttp, 'ContactTypeID',
ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--']) ?>
<input type='button' id='btnadd' value="add contact">
<div class="form-group">
<?= Html::submitInput('Submit', ['class' => 'btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
现在我需要在用户点击#btnadd而不是我现在拥有的内容时显示dorpdown:P
提前谢谢你:)
答案 0 :(得分:3)
这几乎是一回事。就像下面这样:
$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
. Html::activeDropDownList($cntcttp, 'ContactTypeID',
ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--'])
. '\');'
. '})');
就是这样。
您可能会在javascript
中收到语法错误,因为,Yii将\n
放入下拉列表中。避免语法错误的最强脏方法如下所示:
$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
. str_replace("\n", "", Html::activeDropDownList($cntcttp, 'ContactTypeID',
ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--']))
. '\');'
. '})');
特别感谢Soju在评论中提到使用json_encode()
但是,我写道,最脏的方法是使用str_replace()
,但是,您可以使用json_encode()
代替更优雅的解决方案:
$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append('
. json_encode(Html::activeDropDownList($cntcttp, 'ContactTypeID',
ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--']))
. ');'
. '})');