2017-01-11 254 views
0

我有一个名为employee_name的字段,根据此字段值,我想自动填充另一个字段employee_id。我搜索了,我发现this答案,并尝试在我的表单上实现这一点,但我得到Error in ajax request。在我的表格jQuery代码是yii2根据另一个字段自动填充相关字段

$('#emp').focusout(function() { 
     empName = this.value; 
     if (empName != '' || empName != null) { 
      $('#depcustomer-employee_name').val(empName); 
     } 
     $.ajax({ 
      url: '".yii\helpers\Url::toRoute("deposit/employeeid")."', 
      dataType: 'json', 
      method: 'GET', 
      data: {name: $(this).val()}, 
      success: function (data, textStatus, jqXHR) { 
       $('#depcustomer-employee_id').val(data.id); 
      }, 
      beforeSend: function (xhr) { 
       alert('loading!'); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       console.log('An error occured!'); 
       alert('Error in ajax request'); 
      } 
     }); 
    }); 

我的控制器名称为Deposit和我的控制器代码是

public function actionEmployeeid($name){ 
$model= app\modules\settings\models\DepEmployee::findOne(['employee_name'=>$name]); 
return \yii\helpers\Json::encode([ 
    'id'=>$model->employee_id 
]); 

可能是什么原因可能是我的Ajax代码是不工作?

我的表格很大。这里的员工字段项的一部分

<div class="row"> 
       <div class="col-md-6">    
       <?= $form->field($model, 'employee_id')->textInput(['maxlength' => true]) ?> 
       </div> 
       <div class="col-md-6"> 
        <label for='emp'>Employee Name</label> 
        <?= Html::activeHiddenInput($model, 'employee_name')?> 

        <?php 
         echo AutoComplete::widget([ 
          'name' => 'employee_name', 
          'id' => 'emp', 
          'clientOptions' => [ 
           'source' => $dataEmp, 
           'autoFill'=>true, 
           'minLength'=>'2', 
           'select' => new JsExpression("function(event, ui) { 
            $('#depcustomer-name').val(ui.item.id); 
           }") 
          ], 
         ]); 
        ?>  
       </div> 
      </div> 
+0

你怎么能指望jQuery来知道这一点:'警予\佣工\地址:: toRoute( “存款/雇员”)' ?请发布您的表单以获得更多帮助。 – stfsngue

+0

@stfsngue所以,我应该用像'http://localhost/testingDeposit/backend/web/index.php?r = deposit%2Fdeposit%2Femployeeid'这样的绝对网址来代替它 – gojiraki

+0

试试这个答案。 – stfsngue

回答

1

根据您的自动填充数据,您已有employee_id。所以不需要发出Ajax请求来获得员工ID。

DepEmployee型号

public static function getEmpData() 
{ 
    $dataEmp = DepEmployee::find() 
     ->select(['employee_name as value', 'employee_name as label','employee_id as id']) 
     ->asArray() 
     ->all(); 

    return $dataEmp; 
} 

_form

<?= AutoComplete::widget([ 
     'name' => 'employee_name', 
     'id' => 'emp', 
     'clientOptions' => [ 
       'source' => DepEmployee::getEmpData(), 
       'autoFill'=>true, 
       'minLength'=>'2', 
       'select' => new JsExpression("function(event, ui) { 
        $('#depcustomer-name').val(ui.item.id); 
        $('#depcustomer-employee_id').val(ui.item.id); 
       }") 
      ], 
]);?> 
0

如果我是你,我会做的事:

这里的看法:

<?= $form->field($model, 'employeeName')->textInput([ 
    // I use onfocusout instead of focusout 
    'onfocusout' => ' 
     $.post("generateemployeeid?name="+$(this).val(), function(data) { 
      $("#employee_id_container").html(data); 
     }); 
    ', 
]) ?> 

<div id="employee_id_container"></div> // <- I will autofill here 

现在这里是谁,将填补该功能ID输入:(应该在你的控制器)

public function actionGenerateemployeeid($name) { 
    $employeeModel = DepEmployee::find() 
     ->where(['employee_name' => $name]) 
     ->one(); 

    if($employeeModel !== NULL) { 
     echo 'Employee ID: <input type="text" name="EmployeeID" value="'.$employeeModel->employee_id.'" readonly><br>'; 
    } 
    else { 
     // error 404 
    } 
} 

简历: jquery函数取出员工姓名并发送给将在数据库中查找员工ID的控制器。然后发送一个带有默认值(员工ID)的输入文本作为响应,并在窗体中加载该输入。

相关问题