2014-12-18 25 views
1

的問題說,這一切,我昨天問 How to add fields to activeform with js/jQuery in Yii2?如何添加activeDropDownList與jQuery形式? PHP - 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

預先感謝您:)

回答

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

特別感謝燒酒誰在評論中提及使用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--'])) 
. ');' 
. '})'); 
+0

我試過了,它給我一個語法錯誤:未終止的字符串文字 –

+0

@FernandoAndrade你可以發佈'Html :: activeDropDownList()'產生的HTML(編輯你的問題並添加它)嗎?它只是一個正確轉義事情的問題......您可能可以直接執行此操作,或者您可能需要使用'activeDropDownList'的自定義實現來重載'HTML',但無論如何它應該可行。 – prodigitalson

+0

我在編輯註釋時即將輸入代碼 它的工作:)再一次你保存了一天很多謝謝:) –