Выберите виджет Get ID и обновил другой ввод текста в Yii2 - PullRequest
0 голосов
/ 03 октября 2019

создать форму select2. когда выбрано, измените другой inputText из той же таблицы sql

Привет всем нужен ваш совет в рамках yii2. У меня есть имя таблицы sql: mfwp.its содержит id, id_mfwp, npwp, nama_wp и alamat_wp iиспользуйте виджет select2, чтобы найти npwp, после того, как пользователь выберет npwp, он бросит идентификатор в имя inputText: nama_wp (извлечет nama_wp из таблицы mfwp sql) и inputText: alamat_wp (извлечет alamat_wp из таблицы mfwp sql). Вот моя функция в MfwpC.

public function actionLists($id){

    $countPosts = MFwp::find()
    ->where(['id' => $id])
    ->count();

    $posts = Mfwp::find()
    ->where(['id' => $id])
    ->orderBy('id DESC')
    ->all();


    if($countPosts>0){
        foreach($posts as $post){
        echo "<option value='".$post->id."'>".$post->nama_wp."</option>";
        }
    }else{
        echo "<option>-</option>";
    }

}

и вот моя форма просмотра

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\widgets\DatePicker;
use \yii\helpers\ArrayHelper;
use \app\models\Mfwp;
use \app\models\Pejabat;
use kartik\widgets\Select2;
use yii\helpers\Json;
use yii\helpers\Url;
use yii\web\View;

<?= $idnpwp = ArrayHelper::map(Mfwp::find()->all(),"id", "npwp", "nama_wp");?>
<?= $form->field($model, 'npwp')->widget(Select2::classname(), [
    'language' => 'id',
    'data' => $idnpwp,
    'options' => ['placeholder' => 'Select a NPWP ...'],
    'pluginOptions' => [
    'allowClear' => true
    ],

    'pluginEvents' => [
        'Change'=>'
        $.post("'.Url::to(['mfwp/lists']).'&id="+$(this).val(),function(data){
        $("#target").html(data);
        });
        '
    ]

]);

?>

<?= $form->field($model, 'nama_wp')->textInput(['id' => 'target']) ?>

Я уже пробовал только для 1 inputText, но все еще застрял. Когда я перезагружаю свой консольный браузер, после списка аргументов появляется ошибка: SyntaxError: missing).

я пытаюсь перейти к http://bla -bla.oke / mfwp / lists? Id = 1 и показать что-то вроде этого:

Сначала попробуйте перед изменением кода:необработанные данные:

<option value='1'>DARIA VARIA</option>null   

зачем показывать ноль? а затем

JSON: SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON

такжеiam попробуй изменить pluginevents для select2, сделайте так:

       'pluginEvents' => [
        'change'=>'function(data) { 
            var data_id = data.currentTarget.value;

            },$.post("'.Url::to(['mfwp/lists']).'&id="+val(data_id),function(data){
            $("#target").val(data.nama_wp);
            });',
      ]

и функция actionList в контроллере станет такой же

    public function actionLists($id)
{   


    $posts = Mfwp::find()
    ->where(['id' => $id])
    ->asArray()
    ->orderBy('id DESC')
    ->one();
    Yii::$app->response->format = 'json';
    return $posts;


}

в консольном браузере все еще и все еще происходит ошибка, появляется ошибка: SyntaxError: отсутствует) после списка аргументов

, если я перейду к http://bla -bla.oke / mfwp / lists? Id = 1 : После того, как я изменил контроллер и просмотрю плагины форм в select2, таблица, отображаемая в браузере, все поля в таблице mfwp sql извлечены. либо в формате JSON, либо в виде необработанных данных.

но значение по-прежнему не отображается в inputText nama_wp в форме ..

thx для предоставления совета ..

Обновленное решение от г-на Омара:

ive изменил pluginevents стал таким:

        'pluginEvents' => [
        'change'=>'function(event){
            var data_id = event.currentTarget.value;
            $.post("'.Url::to(['mfwp/lists']).'?id="+data_id,function(data){
            $("input#namas").val(data.nama_wp);$("#alamats").val(data.alamat_wp)
            });
        }'
      ]

и я изменил функцию в контроллере, стал таким:

public function actionLists($id)
{   


    $posts = Mfwp::find()
    ->where(['id' => $id])
    ->asArray()
    ->orderBy('id DESC')
    ->one();
    Yii::$app->response->format = 'json';
    return $posts;


}

** его работа великолепна, спасибо моему другу. **

1 Ответ

0 голосов
/ 03 октября 2019

Во-первых, событие change, а не Change, поэтому измените его соответствующим образом. О проблеме, ваша проблема здесь

$.post("'.Url::to(['mfwp/lists']).'&id="+$(this).val(),function(data){

вы добавляете строку запроса с & вместо ?, что является причиной того, что при переходе по изменению опции id не передаетсяна страницу / действие.

Измените его на

$.post("'.Url::to(['mfwp/lists']).'?id="+$(this).val(),function(data){

Помимо приведенного выше предложения, в вашем коде есть несколько ошибок, вы должны исправить их, например, во второй части, где вы говорите, что изменили событие дляselect2 также неверен

'pluginEvents' => [
        'change'=>'function(data) { 
            var data_id = data.currentTarget.value;

            },$.post("'.Url::to(['mfwp/lists']).'&id="+val(data_id),function(data){
            $("#target").val(data.nama_wp);
            });',
      ]

Если эти ошибки происходят только из-за добавления здесь вручную, вам следует всегда копировать вставлять код здесь как есть, а не писать вручную, чтобы можно было определить фактическую причину.

Обновление

Я думал, вы заметите ошибку в коде, поскольку я уже упоминал, что она не верна. Но в любом случае вы должны изменить приведенный выше код на следующий, чтобы работать правильно

'pluginEvents' => [
    'change'=>'function(event){
        var data_id = event.currentTarget.value;
        $.post("'.Url::to(['mfwp/lists']).'?id="+data_id, function(data){
            $("#target").html(data);
        });
    }'
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...