如何使用jQuery将activeDropDownList添加到表单中?PHP-Yii2

如何使用jQuery将activeDropDownList添加到表单中?PHP-Yii2,php,jquery,yii2,Php,Jquery,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

这个问题说明了一切,昨天我问

好吧,现在我需要添加一个下拉菜单,这是不一样的事情

我有这个:

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(); ?>
使用yii\helpers\Html;
使用yii\widgets\ActiveForm;
使用yii\helpers\ArrayHelper;
使用app\models\User;
使用app\models\ContactType;
$cntcttp=新联系人类型;
$this->registerJs('$(“#btnadd”)。在(“单击”,函数(){”
..$(“#dynamicInput”).append(\''
.Html::textInput(“联系人”、“占位符”=>“联系人”])
. '\');'
. '})');
?>
现在,我需要在用户单击#btnadd时显示dorpdown,而不是我现在拥有的:p


提前谢谢:)

几乎是一样的。只需像下面这样做:

$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
.   Html::activeDropDownList($cntcttp, 'ContactTypeID',
    ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--'])
. '\');'
. '})');
$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
.   str_replace("\n", "", Html::activeDropDownList($cntcttp, 'ContactTypeID',
    ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--']))
. '\');'
. '})');
就这些


您可能在
javascript
中遇到语法错误,因为Yii将
\n
放在下拉列表中。避免该语法错误的最糟糕的方法是如下操作:

$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
.   Html::activeDropDownList($cntcttp, 'ContactTypeID',
    ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--'])
. '\');'
. '})');
$this->registerJs('$("#btnadd").on("click",function(){'
. '$("#dynamicInput").append(\''
.   str_replace("\n", "", Html::activeDropDownList($cntcttp, 'ContactTypeID',
    ArrayHelper::map($ctypes, 'ContactTypeID', 'Name') , ['prompt'=>'--contacto--']))
. '\');'
. '})');

特别感谢Soju在评论中提到使用
json\u 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--']))
. ');'
. '})');

我试过了,它给我一个语法错误:未终止的字符串literal@FernandoAndrade您能否发布
HTML::activeDropDownList()
生成的HTML(编辑您的问题并添加它)?这只是一个适当逃避事情的问题。。。您可能可以直接执行,或者您可能需要使用
activeDropDownList
的自定义实现来重载
HTML
,但无论哪种方式,它都应该是可行的。当您编辑评论时,我正要将代码放入其中:)再次为您节省了时间非常感谢:)您应该只使用json编码@soju嘿,伙计,谢谢你提到这一点。我已经更新了答案。再次感谢