2016-04-18 21 views
1

私はYii2 kartikウィジェットを使用して2つのselect2 ajaxの読み込みドロップダウンリストを使用しています。最初のドロップダウンの選択を変更しながら、2番目のドロップダウンの選択を変更する必要があります。Yii2 select2 ajaxドロップダウンロード

最初のドロップダウン

<?php 
 

 
    $qtnno = ''; 
 
    $qtn = ServiceQuotation::find()->where(['UDNO' => $model->QTN_UDNO])->one(); 
 
    if($qtn != null) $qtnno = $qtn->UDNO; 
 

 
    echo $form->field($model, 'QTN_UDNO')->widget(Select2::classname(), [ 
 
    'initValueText' => $qtnno, // set the initial display text 
 
    'options' => ['placeholder' => 'Search for a Quotation ...', 
 
      'onchange'=>' 
 
\t \t     $.getJSON("'.Url::toRoute('getqtndetails').'", { id: $("#servicejobcard-qtn_udno").val() }) 
 
\t \t      .done(function(data) { 
 
\t \t       $("#'.Html::getInputId($model, 'QTNNO').'").val(data.qtnno); 
 
\t \t       $("#'.Html::getInputId($model, 'QTNDATE').'").val(data.qtndate); 
 
\t \t       $("#'.Html::getInputId($model, 'PCODE').'").select2({ data: [{id: data.pcode, text: data.pname}]});; 
 
           $("#'.Html::getInputId($model, 'PCODE').'").select2("val",data.pcode); 
 
           $("#'.Html::getInputId($model, 'PROJECTNAME').'").val(data.projectname); 
 
\t \t      } 
 
\t \t    );' 
 
       ], 
 
     'pluginOptions' => [ 
 
     'allowClear' => true, 
 
     'minimumInputLength' => 3, 
 
     'ajax' => [ 
 
      'url' => $urlQtn, 
 
      'dataType' => 'json', 
 
      'data' => new JsExpression('function(params) { return {q:params.term}; }') 
 
     ], 
 
     'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
 
     'templateResult' => new JsExpression('function(data) { return data.text; }'), 
 
     'templateSelection' => new JsExpression('function (data) { return data.text; }'), 
 
    ], 
 
]); 
 
     ?>

番目のドロップダウン

<?php 
 

 
    $cusName = empty($model->PCODE) ? '' : Customer::findOne($model->PCODE)->PNAME; 
 

 
    echo $form->field($model, 'PCODE')->widget(Select2::classname(), [ 
 
    'initValueText' => $cusName, // set the initial display text 
 
    'options' => ['placeholder' => 'Search for a Customer ...', 
 
       ], 
 
     'pluginOptions' => [ 
 
     'allowClear' => true, 
 
     'minimumInputLength' => 3, 
 
     'ajax' => [ 
 
      'url' => $url, 
 
      'dataType' => 'json', 
 
      'data' => new JsExpression('function(params) { return {q:params.term}; }') 
 
     ], 
 
     'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
 
     'templateResult' => new JsExpression('function(party) { return party.text; }'), 
 
     'templateSelection' => new JsExpression('function (party) { return party.text; }'), 
 
    ], 
 
]); 
 
     ?>

上記のコードを使用して、2番目のドロップダウンで選択を変更できます。しかし、変更後、私は2番目のドロップダウンで選択することができません。

...

答えて

0

onchangeイベントをこのように使用してみてください助けてください:

[ 
    'options' => [], 
    // other settings 
    'pluginEvents' => [ 
     'change' => "function() { alert('change'); }", 
    ] 
] 

あなただけSelectセレクトを使用することに制限されていない場合は、そのページhttp://demos.krajee.com/widget-details/select2

1

に関する追加情報を見つけることができますウィジェットを使用する場合は、依存ドロップダウン用に作成されたKartik VのDepDropウィジェットを使用することをお勧めします。

あなたのコードが実際に何をしているかについて多くの文脈を与えていないので、私は単純な2レベルの依存関係の例を与えています(Kartik Vのdepdropウィジェットページで与えられた例のわずかに修正されたバージョン)。

/* 
* 2-level dependency example 
*/ 
// THE VIEW 
use kartik\widgets\DepDrop; 

// Parent 
echo $form->field($model, 'cat')->dropDownList($catList, ['id'=>'cat-id']); 

// Dependent Dropdown (Child) 
echo $form->field($model, 'subcat')->widget(DepDrop::classname(), [ 
    'options'=>['id'=>'subcat-id'], 
    'pluginOptions'=>[ 
     'depends'=>['cat-id'], 
     'placeholder'=>'Select...', 
     'url'=>Url::to(['/site/subcat']) 
    ] 
]); 

// THE SITE CONTROLLER (/site/subcat) 
public function actionSubcat() { 
    $out = []; 
    if (isset($_POST['depdrop_parents'])) { 
     $parents = $_POST['depdrop_parents']; 
     if ($parents != null) { 
      $cat_id = $parents[0]; 
      $out = self::getSubCatList($cat_id); 
      // the getSubCatList function will query the database based on the 
      // cat_id and return an array like below: 
      // [ 
      // ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'], 
      // ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>'] 
      // ] 
      echo Json::encode(['output'=>$out, 'selected'=>'']); 
      return; 
     } 
    } 
    echo Json::encode(['output'=>'', 'selected'=>'']); 
} 

上記のコードは、要件に合わせてカスタマイズすることができます。ここで

は、より多くの詳細については、リンクです:http://demos.krajee.com/widget-details/depdrop

+0

あなたの答えは、別のライブラリが質問は、具体的SELECT2に言及しているという事実にもかかわらず使用することができますassumtionから始まります。質問の制限に関する質問がある場合、質問に答えるのではなく、最初に質問にコメントすることをお勧めします。この場合、select2が使用される理由はいくつかあります。しかし、あなたの答えは適切にフォーマットされています。 – smoksnes

+1

フィードバックありがとうございます。私はその質問にコメントを追加しようとしましたが、評判の欠如が私にそれをさせるのを妨げました。さらに重要なのは、DepDropは別のプラグインですが、ドロップダウンの_タイプ_を生成するオプションがあり、Select2プラグインをサポートしています。 – sm1979

+1

はい、あなたの評判については正しいです。私は評判の部分を考えなかったし、あなたはそれを他の方法でやっていけなかった。私の悪い。あなたはコメントを無視することができます。とにかく、あなたの最初の答えを投稿することを決めたことは素晴らしいことです!これはうまく形成されており、このコードの大きな部分をこの例に含めたことは素晴らしいことです。がんばろう! – smoksnes

0

あなたが仕事をするために、クエリのこの種を追加することができます。

$cusname=QtnUdno::find()->select('PCODE')->where(['UDNO'=>$model->QTN_UDNO])->one();

関連する問題