AJAX无法使用yii2的textarea和CKeditor小部件

时间:2018-03-27 06:48:24

标签: ajax yii2

以下代码将按预期实现AJAX-Request。奇怪的是,它只能使用yii2-method textinput()。使用yii2方法textarea()甚至小部件CKEditor都不起作用 - 任何想法如何使用更舒适的方法但textInput()使用AJAX-Request? 这是Controllercode:

<?php

namespace frontend\controllers;

use Yii;
use yii\helpers\Json;
use backend\modules\app_einstellung\models\Textbaustein;
use yii\web\Controller;

class TextbausteinController extends Controller {

    public function actionBaustein($textId) {
        $text = Textbaustein::findOne($textId);
        echo Json::encode($text);
    }

}

这是JQueryCode:

<?=
Dialog::widget();

$script = <<< JS
        $('#bez').change(function(){
        var textId=$(this).val();
        $.get('textbaustein/baustein',{textId:textId},function(data){
   var data=$.parseJSON(data);
  krajeeDialog.alert('Fügen Sie eventuell  erzeugte Mailvorlagen manuell(Copy&Paste) in Ihren Maileditor ein');
   $('#mailausgang-inhalt').attr('value',data.inhalt);
   });
        });

JS;

$this->registerJS($script);
?>

以下元素不适用于AJAX!为什么?

   //echo $form->field($model, 'bodytext')->textarea();
/* echo $form->field($model, 'bodytext')->widget(\dosamigos\ckeditor\CKEditor::className(), [
 'preset' => 'full', 'clientOptions' => ['height' => 200],
   ]); */

只有这个元素适用于AJAX!为什么只有这个?

    <div class="col-md-6">
        <?=
        $form->field($modelTextbaustein, 'bezeichnung', ['addon' => [
                'prepend' => ['content' => 'Mailvorlagen']]])->widget(\kartik\widgets\Select2::classname(), [
            'data' => \yii\helpers\ArrayHelper::map(Textbaustein::find()->orderBy('bezeichnung')->asArray()->all(), 'id', 'bezeichnung'),
            'options' => [
                'id' => 'bez'
            ],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]);
        ?>
    </div>

    works only with this:
    <?php    
         echo $form->field($model, 'bodytext', ['addon' => [
                        'prepend' => ['content' => 'Vorlage']]])->widget(TwbsMaxlength::className())
                ->textInput();

改述问题:

我认为要在keypress事件上附加一个事件处理程序,只有当键是ENTER时才会触发Ajax调用,我这样编码但是没有成功:

$script = <<< JS
$('#bez').keypress(function(e){
    if(e.which == 13) {
        var textId=$(this).val();
        $.get('textbaustein/baustein',{textId:textId},function(data){
            var data=$.parseJSON(data);
            $('#mailausgang-inhalt').attr('value',data.inhalt);
        });
    }
});

1 个答案:

答案 0 :(得分:1)

我不知道这是不是这个错误,但我想你的AJAX响应中你设置了输入中的值&#34; id&#34;是错的。

当您在yii2中的表单中创建输入时,他的id通过defaut是&#34; nameModel-attribute &#34; ,那么在你的情况下,它是&#34; textbaustein-bodytext&#34;,在你的JS中,你必须这样写。

// this set a attribute value , but  you dont see difference in you view , only in the code 
 $('#textbaustein-bodytext').attr('value',data.inhalt);

// this change  that you see
 $('#textbaustein-bodytext').text(data.inhalt);
//or
 $('#textbaustein-bodytext').val(data.inhalt);
  

如果你想写一个不同的ID,你必须这样写

echo $form->field($model, 'bodytext')->textarea(['id'=>'testId']);