「year」と「console」が選択されているときにテキストボックスに「num」を入力しようとしています。データベースクエリは、year = 'someyear'とconsole = 'someconsole'のときにテーブルからselect max(num)+1のように実行する必要があります。yii2の2つの別々のドロップダウンリストのテキストボックスonchangeでデータを入力する方法
public function actionGetForNum($yearid , $consoleid)
{
$num = Bills::find()->select('(max(num) + 1) as num')->where(['bills_year'=>$yearid])->andWhere(['console'=>$consoleid])->asArray()->one();
echo Json::encode($num);
}
私は一年とコンソールを選択するために、SELECT2ウィジェットを使用しています - 私のコントローラのアクションは次のようになります。年とコンソールは互いに依存しません。
<?= $form->field($model, 'bills_year')->widget(Select2::classname(), [
'data' => ArrayHelper::map(Year::find()->orderBy(['yid' => SORT_DESC,])->all(),'year_year','year_year'),
'language' => 'en',
'options' => ['placeholder' => 'Select Year', 'id' => 'yearid'],
'pluginOptions' => [
'allowClear' => true
],
]); ?>
<?= $form->field($model, 'console')->widget(Select2::classname(), [
'data' => ArrayHelper::map(Console::find()->orderBy(['consoleid' => SORT_ASC,])->all(),'console','console'),
'language' => 'en',
'options' => ['placeholder' => 'Select Console','id' => 'consoleid'],
'pluginOptions' => [
'allowClear' => true
],
]); ?>
とJavaScriptのコードが、私はエラーを取得しています。このコードでは
<?php
/* start getting the num */
$script = <<< JS
$(function(){
$('#yearid').change(function(){
getNum();
});
$('#consoleid').change(function(){
getNum();
});
var yearid = $(this).val();
var consoleid = $(this).val();
var getNum = $.get('index.php?r=invoice/bills/get-for-num',{ yearid : yearid, consoleid : consoleid }, function(data){
alert(data);
var data = $.parseJSON(data);
$('#bills-num').attr('value',data.num);
});
});
JS;
$this->registerJs($script);
/* end getting the num */
?>
IS-試してみた - TypeError: getNum is not a function
はここでエラー画面である - それを修正する方法を提案してください。
更新 -
<?php
/* start getting the num */
$script = <<< JS
$(function(){
$('#yearid').change(function(){
getNum();
});
$('#consoleid').change(function(){
getNum();
});
var yearid = $(this).val();
var consoleid = $(this).val();
var getNum = function(){
var yearid = String($('#yearid').val());
var consoleid = String($('#consoleid').val());
$.get('index.php?r=invoice/bills/get-for-num',{ yearid : yearid, consoleid : consoleid }, function(data){
alert(data);
var data = $.parseJSON(data);
var getNum = data;
$('#bills-num').val(getNum);
});
} ;
});
JS;
$this->registerJs($script);
/* end getting the num */
?>
そして、私は希望の値を取得していますが、テキストボックスに表示されないです - 私は以下のようにJavaScriptコードを変更しました。今はとても近いです。助けてください。 下のスクリーンショット
を確認してください、私はit.Butは何にはに取得していないお読みください。もう少しお手伝いください。 – Tanmay
は 'parseJSON'から' data'を表示するか、 '$( '#bills-num').val(data.num)'を試してください。 –