yii2基于另一个字段的自动填充相关字段

yii2基于另一个字段的自动填充相关字段,yii2,autofill,Yii2,Autofill,我有一个名为employee_name的字段,根据该字段的值,我想自动填充另一个字段employee_id。我已经搜索并找到了答案,并尝试在我的表单上实现它,但我在ajax请求中遇到了错误。我表单中的jquery代码是 $('#emp').focusout(function() { empName = this.value; if ( empName != '' || empName != null ) { $('#depcustomer-

我有一个名为employee_name的字段,根据该字段的值,我想自动填充另一个字段employee_id。我已经搜索并找到了答案,并尝试在我的表单上实现它,但我在ajax请求中遇到了错误。我表单中的jquery代码是

$('#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代码不起作用的可能原因是什么

我的体型很大。这是employee字段输入的一部分

<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>

如果我在你家,我该怎么办:

以下是观点:

<?= $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
    }
}

Resume:jquery函数获取员工姓名并发送给控制器,控制器将在数据库中查找员工ID。然后发送一个带有默认值employee ID的输入文本作为响应,并将此输入加载到表单中。

根据您的自动完成数据,您已经有了employee ID。因此无需发出ajax请求来获取员工ID

非雇员模型

_形式


您希望jquery如何知道:yii\helpers\Url::torouteposit/employeeid?请发布您的表单以获得更多帮助。@stfsngue那么,我是否应该将其替换为绝对url,如http://localhost/testingDeposit/backend/web/index.php?r=deposit%2Fdeposit%2FemployeeidTry 此答案已被删除。显示$dataEmp内容。@此处为Inaseskull
public static function getEmpData()
{
    $dataEmp = DepEmployee::find()
       ->select(['employee_name as value', 'employee_name as label','employee_id as id'])
       ->asArray()
       ->all();

    return $dataEmp;
}
<?= 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);
               }")
          ],
]);?>