Повторяющиеся входные данные при добавлении с использованием jQuery

Вот код:

    <form class = "ui form attached fluid loading segment" onsubmit = "return contact(this)">
    <div class = "field">
    <label>Preferred Tour</label>
        <div class = "field">
          <?php
            $conn=mysqli_connect('####','####','####','####');

            echo '<select required id = "tourInfo">';
            echo '<option value = "" selected disabled>--Preferred Tour--</option>';
            $db = mysqli_query($conn, "SELECT `id`,`tourprice`,`tourname` FROM `available_tours`");
            while ($d=mysqli_fetch_assoc($db)) {
              
              echo "<option value = ".$d['id']." id = ".$d['tourname']. " data-price = ".$d['tourprice'].">".$d['tourname']."</option>";
            
            }
              
            echo "</select>";
          ?>
        </div>   
    </div>
    <div class = "field" id = "hiddenTortu" style = "display: none;"> 
    <label>Attention</label> 
        <div class = "ui icon">
          <p><b>The minimum of people for this tour is 5, less than 5 the tour is not realisable</b></p>
        </div>
    </div>
    <div class = "field">  
      <label>Available Time</label>
      <div class = "field">
        <?php
          $conn=mysqli_connect('####','####','####','####');

          echo '<select name = "gender" required id = "timeInfo">';
          echo '<option value = "" selected disabled>--Preferred Time--</option>';
          $db = mysqli_query($conn, "SELECT `time_real` FROM `available_time`");
          while ($d=mysqli_fetch_assoc($db)) {
            echo "<option value = ".$d['time_real'].">".$d['time_real']."</option>";
          }
            
          echo "</select>";
        ?>
      </div>
    </div>
  <div class = "two fields"> 
      <div class = "field" id = "pax"> 
          <label>Please specify the number of People according to the perred tour selection</label>

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

Проблема в том, что когда пользователь сначала выбирает один вариант, а затем понимает, что лучший вариант - другой, когда он / она делает другой выбор, ввод, созданный с помощью jQuery, который был добавлен, остается, и из-за нового выбора создается новый ввод .

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

          <script>
                $(document).ready(function(){
                  $('#tourInfo').on('change', function() {
                    if ( this.value == '1')
                    {
                      $("#pax").append($('<input placeholder = "Number of People" type = "number" id = "peopleInfo" min = "1" max = "2"  value = "1" required>'));
                                  (function ($) {
                          $.fn.restrict = function () {
                              return this.each(function(){
                                  if (this.type && 'number' === this.type.toLowerCase()) {
                                      $(this).on('change', function(){
                                          var _self = this,
                                              v = parseFloat(_self.value),
                                              min = parseFloat(_self.min),
                                              max = parseFloat(_self.max);
                                          if (v >= min && v <= max){
                                              _self.value = v;
                                          }
                                          else {
                                              _self.value = v < min ? min : max;
                                          }
                                      });
                                  }
                              });
                          };
                      })(jQuery);

                      $('#peopleInfo').restrict();

                    }
                    else if (this.value == '2')

                      $("#pax").append($('<input placeholder = "Number of People" type = "number" id = "peopleInfo" min = "3" max = "5"  value = "3" required>'));
                                  (function ($) {
                          $.fn.restrict = function () {
                              return this.each(function(){
                                  if (this.type && 'number' === this.type.toLowerCase()) {
                                      $(this).on('change', function(){
                                          var _self = this,
                                              v = parseFloat(_self.value),
                                              min = parseFloat(_self.min),
                                              max = parseFloat(_self.max);
                                          if (v >= min && v <= max){
                                              _self.value = v;
                                          }
                                          else {
                                              _self.value = v < min ? min : max;
                                          }
                                      });
                                  }
                              });
                          };
                      })(jQuery);

                      $('#peopleInfo').restrict();
                    }
                    else if (this.value == '3')
                    {
                      $("#pax").append($('<input placeholder = "Number of People" type = "number" id = "peopleInfo" min = "6" max = "15"  value = "6" required>'));
                                  (function ($) {
                          $.fn.restrict = function () {
                              return this.each(function(){
                                  if (this.type && 'number' === this.type.toLowerCase()) {
                                      $(this).on('change', function(){
                                          var _self = this,
                                              v = parseFloat(_self.value),
                                              min = parseFloat(_self.min),
                                              max = parseFloat(_self.max);
                                          if (v >= min && v <= max){
                                              _self.value = v;
                                          }
                                          else {
                                              _self.value = v < min ? min : max;
                                          }
                                      });
                                  }
                              });
                          };
                      })(jQuery);
                      $('#peopleInfo').restrict();
                    }...
                    
                              ...});
                          };
                      })(jQuery);

                      $('#peopleInfo').restrict();
                    }
                  });
            });
        </script>
      </div> 
      <div class = "field"> 
          <label><br>Date of Tour</label>
          <input type = "text" readonly required id = "tourDate" class = "datepicker-here form-control" placeholder = "ex. August 03, 1998">
      </div>  
  </div>
  <div style = "text-align:center">
    <div>
      <label>Ensure all details have been filled correctly</label>
    </div>
    <button class = "ui green submit button">Submit Details</button>
  </div> 
</form>
</div>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переместите свой скрипт изнутри div с помощью id pax, затем Перед добавлением очистите HTML-код элемента с помощью id pax:

 //Using JQuery
 $('#pax').html('');

У меня есть еще один вопрос по тому же сценарию. Как я отключил возможность писать на номере типа ввода и просто оставил стрелки работать. Я пробовал это $ ("[type = 'number']"). Keypress (function (evt) {evt.preventDefault ();}); но не сработало.

lvargasmoya 25.04.2018 19:07

Вы можете просто отключить их, что может быть проще. И ваш селектор запросов неверен, вам нужно $ ('input [type = "number"]). Keypress () и т. д., Но вы можете просто отключить их вместо того, чтобы перекрывать события нажатия клавиш, например, $ (' input [type = "число"]). prop ('отключено', истина);

Ryan Wilson 25.04.2018 19:09

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

lvargasmoya 25.04.2018 19:18

@Ivargasmoya Не все браузеры поддерживают тип ввода = число, где он всегда дает им стрелки для перемещения числа вверх и вниз. Но если вы хотите пойти по этому маршруту, вы можете установить минимальные и максимальные значения на входе, чтобы, когда пользователь щелкает стрелки, он не позволяет числу идти выше или ниже этих

Ryan Wilson 25.04.2018 19:20

@Ivargasmoya Вам нужно будет прикрепить прослушиватели событий к вашим входам, когда документ загрузится, используя JQuery document.ready (), а затем внутри этой функции do, $ ('input [type = "number"). On (' keypress, функция (evt) {evt.preventDefault ();});

Ryan Wilson 25.04.2018 19:33

Другие вопросы по теме