множественный выбор, дающий только первый выбор при отправке на firebase

# #javascript #html #firebase

Вопрос:

мой выбор с несколькими вариантами выбора дает результат только в качестве моего первого выбора. Я отправляю данные в firebase, и там отражается только первый выбор. Например, если я выберу (энергетика, здравоохранение, недвижимость) в своей базе данных, она покажет только энергию.

Вот мой HTML-код:

 <select name="Sector" value="sector" id="interested_sector" class="selectpicker" multiple="multiple" data-live-search="true">
   <option value="">Sector</option>
   <option value="energy">Energy</option>
   <option value="materials">Materials</option>
   <option value="consumer discretionary">Consumer Discretionary</option>
   <option value="consumer staples">Consumer staples</option>
   <option value="health care">Health Care</option>
   <option value="financials">Financials</option>
   <option value="information technology">Information Technology</option>
   <option value="telecommunication services">Telecommunication services</option>
   <option value="utilites">Utilites</option>
   <option value="real estate">Real Estate</option>
</select>
 

Вот фрагмент кода в моем файле .js, который отправляет данные в базу данных в реальном времени

 var interested_sector = getInputVal('interested_sector')

 function getInputVal(id){
    return document.getElementById(id).value;
}

function saveUserInfo( interested_sector){
    firebase.database().ref('User_info/' id).update({
        interested_sector: interested_sector,
    }).then(() => {
      window.location = //it goes to a different html page;
    })
}
 

Комментарии:

1. журнал консоли(interested_sector) пожалуйста! чтобы мы могли видеть, какие значения вы возвращаете, которые отправляете для обновления

2. эй, я добавил ответ, который даст вам то, что вы ищете, прочитайте обновленный ответ

Ответ №1:

База данных firebase в реальном времени состоит из объектов JSON, когда вы получаете значения из входных данных, убедитесь, что они возвращаются в правильном формате, здесь вы, похоже, обновляете существующий вызываемый ключ interested_sector и добавляете к нему значение health, energy etc . Поскольку база данных реального времени принимает JSON, то, что вы отправляете, должно быть правильным JSON, то есть там, где ваш код нарушает значение и, вероятно, принимает первое число, вам нужно просмотреть все принятые значения и решить, в каком формате вы хотите их хранить?

например:

 {
   interested_sector: {
                         1: 'health',
                         2: 'energy'
                      }
}
 

или

 {
   interested_sector: "health, energy"
}
 

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

Итак, после тестирования вашего кода выясняется, что interested_sector значение изменяет все, что вы выбираете, новое значение, оно заменяет старое значение, поэтому при обновлении поля в базе данных firebase оно показывает только последние значения,

так, например: если вы выберете «Энергия» и нажмете кнопку для сохранения информации, это сэкономит «Энергию».

а затем вы нажимаете на «Материалы» и нажимаете кнопку, чтобы сохранить информацию, interested_sector значение изменяется и заменяет старое значение, а функция сохранения информации также изменяет значение firebase.

решение состоит в том, чтобы добавить локальный var, который сохраняет значение и продолжает добавлять их в interested_sector = новое значение, и использовать разделитель, такой как», «или»;».

таким образом, правильный код из приведенного выше, должен быть примерно таким:

 <!DOCTYPE html>
<html>

<body>
  <select name="Sector" value="sector" id="interested_sector" class="selectpicker" multiple="multiple" data-live-search="true">
    <option value="sector">Sector</option>
    <option value="energy">Energy</option>
    <option value="materials">Materials</option>
    <option value="consumer discretionary">Consumer Discretionary</option>
    <option value="consumer staples">Consumer staples</option>
    <option value="health care">Health Care</option>
    <option value="financials">Financials</option>
    <option value="information technology">Information Technology</option>
    <option value="telecommunication services">Telecommunication services</option>
    <option value="utilites">Utilites</option>
    <option value="real estate">Real Estate</option>
  </select>
  <button onclick="getCalled()">Get Called</button>
  <script>
    var final_val = "";

    function getInputVal(id) {
      return document.getElementById(id).value;
    }

    function getCalled() {
      var interested_sector = getInputVal('interested_sector');
      final_val  = interested_sector   ', ';
      console.log(final_val);
      alert(final_val);
    }
  </script>
</body>

</html> 

К вашему сведению: функция обновления firebase не добавляется к старому значению, она изменяет только определенные поля, которые вы хотите изменить, и сохраняет все остальные поля неизменными. в отличие от функции ref().set (), которая полностью переписывает весь объект json

Комментарии:

1. Не могли бы вы объяснить, пожалуйста, как это разобрать, я не могу заставить это работать.

2. @RoobeshBalaji конечно, скажи мне консоль. журнал интересующего_сектора, вар

3. @RoobeshBalaji хорошо, я собираюсь запустить этот код локально и посмотреть результат