Селектор Jquery для нескольких полей ввода с одинаковым именем

У меня есть форма, в которую я загружаю три разных файла. Также у меня есть два поля ввода для всех загрузок файлов, где я храню некоторую информацию о загрузке файлов.

<script
src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> .
</script>

<div>
  <input type = "file"  class = "file_name" name = "file_name[]"onchange = "getFileData(this);" />
  <input type = "text" class = "file_name_helper" name = "file_name_helper[]"/>
  <input type = "text" class = "duration" name = "duration[]"/>
</div>

<div>
  <input type = "file" class = "file_name" name = "file_name[]" onchange = "getFileData(this);" />
  <input type = "text" class = "file_name_helper" name = "file_name_helper[]" />
  <input type = "text" class = "duration" name = "duration[]"/>
</div>

<div>
  <input type = "file" class = "file_name" name = "file_name[]" onchange = "getFileData(this);"/>
  <input type = "text" class = "file_name_helper" name = "file_name_helper" />
  <input type = "text" class = "duration" name = "duration[]"/>
</div>

<script type = "text/javascript">
function getFileData(myFile){
  var file = myFile.files[0];
  var filename = [file.name];
  $(myFile).next("input[name='file_name_helper[]']").val(filename);
  $("input[name='duration[]']").val("duration");
}
</script>

Проблема в том, что когда я загружаю форму, первое поле «file_name_helper» правильно заполняется с помощью селектора, который у меня есть, но когда я делаю то же самое для поля «длительность», это не работает. Как я могу выбрать конкретное поле продолжительности? Любая помощь будет оценена

Поведение ключевого слова "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
1 721
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Из вашего onchange = "getFileData(this);" у вас есть ссылка на первый ввод в div в качестве параметра myFile, и вы хотите выбрать родственного элемента, который соответствует селектору, поэтому вы можете использовать метод .siblings, вызываемый в $(myFile):

function getFileData(myFile){
  var file = myFile.files[0];
  var filename = [file.name];
  $(myFile).next("input[name='file_name_helper[]']").val(filename);
  $(myFile).siblings("input[name='duration[]']").val("duration");
}

Обратите внимание: если ваш HTML соответствует описанию, вам не нужно передавать селектор .next, так как .next по умолчанию выберет ближайший следующий элемент:

$(myFile).next().val(filename);

вы можете использовать .nextAll(), чтобы выбрать элемент длительности

$(myFile).nextAll("input[name='duration[]']").val("duration");

function getFileData(myFile){
  var file = myFile.files[0];
  var filename = [file.name];
  $(myFile).next("input[name='file_name_helper[]']").val(filename);
  $(myFile).nextAll("input[name='duration[]']").val('duration');
}
<script
src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> .
</script>
<div>
  <input type = "file"  class = "file_name" name = "file_name[]"onchange = "getFileData(this);" />
  <input type = "text" class = "file_name_helper" name = "file_name_helper[]"/>
  <input type = "text" class = "duration" name = "duration[]"/>
</div>

<div>
  <input type = "file" class = "file_name" name = "file_name[]" onchange = "getFileData(this);" />
  <input type = "text" class = "file_name_helper" name = "file_name_helper[]" />
  <input type = "text" class = "duration" name = "duration[]"/>
</div>

<div>
  <input type = "file" class = "file_name" name = "file_name[]" onchange = "getFileData(this);"/>
  <input type = "text" class = "file_name_helper" name = "file_name_helper" />
  <input type = "text" class = "duration" name = "duration[]"/>
</div>

или если вы уверены, что ваша разметка будет такой же, как сейчас, вы можете использовать .next().next(), чтобы получить элемент продолжительности.

$(myFile).next().next().val("duration");

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

function getFileData(myFile){
  var file = myFile.files[0];
  var filename = [file.name];
  $(myFile).parent().find("input[name='file_name_helper[]']").val(filename);
  $(myFile).parent().find("input[name='duration[]']").val("duration");
}

Скрипка для вышеперечисленного

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