如何使用jQuery添加activeDropDownList以形成? PHP - Yii2

时间:2014-12-18 18:27:20

标签: php jquery yii2

问题就是这样,昨天我问道 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

提前谢谢你:)

1 个答案:

答案 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--']))
. ');'
. '})');