以下代码将按预期实现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);
});
}
});
答案 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']);