Я пытаюсь отобразить значения данных из текстового файла на основе выбора select

#javascript #php #list

#javascript #php #Список

Вопрос:

Я пытаюсь отобразить значения данных из текстового файла на основе выбора select

 <?php
$lines = file('customers.txt');
?>

<select class="select" style="width: 250px;" name="mylist" id="mylist" required="">
        <option selected="selected" value="">Select Your Company</option>
        <?php foreach($lines as $line){
       $customers = explode(',', $line);
        echo "<option value='".$customers[0]."'>$customers[0] </option>"; }?>
</select>

<input type="text" id="inputid" placeholder="Company Name">
  

и моя попытка js

 <script>
    $(".select").change(function(){
  var res = $(".select").find(":selected").map(function () {
    if($(this).val()!="")
      return $(this).text();
    else
      return "";
   }).get().join("");
  
   $("#inputid").val(res);

 });
</script>
  

Мой customers.txt файл данных:-

Пользователь1, улица, расширение, почтовый индекс

Пользователь2, улица B, расширение B, почтовый индекс B.

Пользователь3, улица C, расширение C, почтовый индекс C

…etc

При выборе Customer1 я хочу отобразить в :-

Customer1
Улица
, расширение
, почтовый индекс

Ответ №1:

Вам нужно каким-то образом передать данные, которые вы хотите иметь в клиентском коде (js). Прямо сейчас вы встраиваете в html только имя клиента, к которому вы можете получить доступ из js (через значение параметра). Если вы хотите также получить доступ к оставшимся данным, вам нужно передать их. Одним из решений может быть атрибут data html (https://www.w3schools.com/tags/att_data-.asp ), который поддерживается jquery (https://api.jquery.com/data /).

 <?php
$lines = file('customers.txt');
?>

<select class="select" style="width: 250px;" name="mylist" id="mylist" required="">
        <option selected="selected" value="">Select Your Company</option>
        <?php foreach($lines as $line){
       $customers = explode(',', $line);
        echo '<option value="'.$customers[0].'" data-line="'.$line.'">'.$customers[0].'</option>'; }?>
</select>

<input type="text" id="inputid" placeholder="Company Name">

<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>

<script>
  $("#mylist").change(function(){
      var line = $(this).find('option:selected').data('line');
    $("#inputid").val(line);
  });
</script>
  

Здесь я добавляю атрибут данных с именем line data-line="'.$line.'" , который содержит целую строку из файла, и добавляю это к каждому тегу option.

Затем в js этот атрибут данных выбранной опции может быть прочитан var line = $(this).find('option:selected').data('line'); .

Если вам нужно больше контролировать то, что доступно из файла, вы можете ввести несколько атрибутов данных с выбранными столбцами из файла или поместить это в виде строки json и прочитать то, что вы хотите в js.

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

1. Спасибо, что меньше кодирования и работает на 100%, уже принято adey_888, но оба кода соответствуют

2. Как я могу иметь разрывы строк вместо всего в одной строке и без ,

3. У вас есть подсказка в последнем абзаце, и тогда принятый ответ будет более подходящим. Вы можете вместо этого: data-line="'.$line.'" сделайте это: data-line="'.str_replace(',', PHP_EOL, $line).'" поэтому замените запятые символами новой строки.

Ответ №2:

Я думаю, это может сработать для вас?

 <?php
$lines = file('customers.txt');
?>

<select class="select" style="width: 250px;" name="mylist" id="mylist" required="">
  <option selected="selected" value="">Select Your Company</option>
<?php
foreach ($lines as $line_num => $line) {
  $customers = explode(',', $line);
    echo "  <option value='{$customers[0]}' data-street='{$customers[1]}' data-extension='{$customers[2]}' data-zipcode='{$customers[3]}'>{$customers[0]}</option>";
}
?>
</select>

<textarea id="inputid" rows="4" cols="50" placeholder="Company Name"></textarea>

<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha256-4 XzXVhsDmqanXGHaHvgh1gMQKX40OUvDEBTu8JcmNs=" crossorigin="anonymous"></script>
<script>
$("#mylist").change(function() {
  var street = $('select option[value='   this.value   ']').data('street');
  var extension = $('select option[value='   this.value   ']').data('extension');
  var zipcode = $('select option[value='   this.value   ']').data('zipcode');

  $("#inputid").val(street   'n'   extension   'n'   zipcode);
});
</script>