автоматическое заполнение других полей на основе значения поля в jsgrid

#php #jquery #ajax #jsgrid

#php #jquery #ajax #jsgrid

Вопрос:

У меня есть следующий макет для таблицы jsgrid: У меня есть следующий макет для таблицы jsgrid

и я хочу, чтобы остальные столбцы заполнялись в соответствии со значением кода элемента. Мне удалось получить значение имени элемента из таблицы базы данных с помощью AJAX, но я не могу асинхронно обновлять значения других полей. Я перепробовал множество методов, которые позволяли мне, например, устанавливать значение по умолчанию для имени элемента, но не могли заставить его обновляться после завершения запроса ajax.

это прототип, который я использовал для проверки значения, полученного из таблицы

 insertTemplate: function () {
                var $insertControl = jsGrid.fields.text.prototype.insertTemplate.call(this);

                $insertControl.change(function () {
                    var item_code = $(this).val();
                    //alert(item_code);
                    $.ajax({
                    type: "POST",
                    url: 'itemquery.php',
                    data: { item_code : item_code },
                    success: function(data)
                    {
                        itemName = data;
                        alert(itemName);
                    }
                });
              });

                return $insertControl;
            },
 

и это код, который я использовал в поле имя элемента, чтобы установить значение по умолчанию

 insertTemplate: function() { 
          return $("<input>").attr("type", "text").attr("value", function(){
            return "test value";
          });
 

моя цель состояла в том, чтобы иметь выпадающий список для поля имени элемента, и когда пользователь выбирает значение, другие поля автоматически заполняются, но я пытался сначала выяснить, как это сделать из кода элемента, поскольку это казалось более простым (и я оставляю это как план Б)

Ответ №1:

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

Вот код полей в сетке:

 fields: [
      {
          name: "StudentId",
          insertTemplate: function () {
              var grid = this._grid;
              var insertResult = jsGrid.fields.select.prototype.insertTemplate.call(this, arguments);

              insertResult.on("change", function () {
                  const selectedValue = insertResult.val();
                  if (selectedValue != 0) {
                      const data = GetStudentDetails(selectedValue);
                      grid.option("fields")[1].insertControl.val(data.Name);
                      grid.option("fields")[2].insertControl.val(data.EmailAddress);
                      grid.option("fields")[3].insertControl.val(data.MobileNo);
                  }
                  else {
                      grid.option("fields")[1].insertControl.val("");
                      grid.option("fields")[2].insertControl.val("");
                      grid.option("fields")[3].insertControl.val("");
                  }
              });
              return insertResu<
          },
          editTemplate: function (value) {
              var grid = this._grid;
              var editResult = jsGrid.fields.select.prototype.editTemplate.call(this, value);

              editResult.on("change", function () {
                  const selectedValue = editResult.val();
                  if (selectedValue != 0) {
                      const data = GetStudentDetails(selectedValue);
                      grid.option("fields")[1].editControl.val(data.Name);
                      grid.option("fields")[2].editControl.val(data.EmailAddress);
                      grid.option("fields")[3].editControl.val(data.MobileNo);

                  }
                  else {
                      grid.option("fields")[1].editControl.val("");
                      grid.option("fields")[2].editControl.val("");
                      grid.option("fields")[3].editControl.val("");
                  }
              });
              return editResu<
          },
          type: "select",
          title: "StudentId",
          items: studentIds,
          valueField: "Id",
          textField: "Id",
          validate: {
              message: "Field StudentId is required",
              validator: function (value)
              {
                  return value != 0;
              }
          }
      },
      { name: "Name", type: "text", title: "Name", validate: "required", readOnly: true },
      { name: "EmailAddress", type: "text", title: "Email Address", readOnly: true},
      { name: "MobileNo", type: "text", title: "Mobile Contact", readOnly: true},
      { type: "control" }
]
 

Хотя функция GetStudentDetails для извлечения данных учащихся с помощью AJAX-вызова не была асинхронной:

 function GetStudentDetails(id) {
    var student = {};
    $.ajax({
        type: "GET",
        url: "/Students/Details",
        data: { "id": id },
        dataType: "json",
        async: false,
        success: function (response) {
            student.Name = response.Name;
            student.EmailAddress = response.EmailAddress;
            student.MobileNo = response.MobileNo;
        },
        error: function (response) {
        }
    });
    return student;
}