Удалить повторение в jQuery?

#jquery

#jquery

Вопрос:

У меня есть несколько меню выбора на странице: я передаю выбранное значение скрытому типу ввода с помощью jQuery. Всего у меня 4, но есть ли способ, которым я мог бы просто использовать функцию on, которая нацелена на используемое меню выбора и передает значение соответствующим образом. Я использовал тот же «формат» для идентификаторов и переменных, поэтому я считаю, что это можно сделать. Спасибо.

Ниже приведен лишь фрагмент того, что я использую на данный момент. Это работает так, как ожидалось, но наверняка должен быть способ использовать только одну функцию?

 jq('#stateSelect').change(function() {
    var myState = jq(this).val();
    jq('#stateChosen').val(myState);
    console.log(myState);
  });

  jq('#countySelect').change(function() {
    var myCounty = jq(this).val();
    jq('#countyChosen').val(myCounty);
    console.log(myCounty);
  });

  jq('#genderSelect').change(function() {
    var myGender = jq(this).val();
    jq('#genderChosen').val(myGender);
    console.log(myGender);
  });

  jq('#whoamiSelect').change(function() {
    var myWhoami = jq(this).val();
    jq('#whoamiChosen').val(myWhoami);
    console.log(myGender);
  });
  

Ответ №1:

Использовать .data()

  • Применить общий класс для выбора элементов как commonSelect
  • Примените другой флаг данных, такой же, как идентификатор скрытых входов.

Пример кода

 $('.commonSelect').change(function() {
    var hiddenId = $(this).data('flag');
    $('#' hiddenId).val($(this).val());
});
  

 $('.commonSelect').change(function() {
    var hiddenId = $(this).data('flag');
    $('#' hiddenId).val($(this).val());
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select data-flag="asdf" class="commonSelect">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="asdf" />
<br/>
<select data-flag="qwerty" class="commonSelect">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="qwerty" />  

Ответ №2:

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

Пример HTML:

 <select class="jqSelect" id="state">...</select>
<input type="text" name="stateChosen" id="stateChosen" value="" />
  

И сценарий:

   jq('.jqSelect').change(function() {
    var myValue = jq(this).val();
    var myId = jq(this).attr('id');
    jq('#' myId 'Chosen').val(myValue);
  });
  

Ответ №3:

Чтобы уточнить, вы хотите использовать одну и ту же функцию Jquery для получения данных из различных полей выбора, правильно? Если это так, я бы дал всем селекторам класс (‘Вы также можете использовать селекторы ввода)

Итак, если вы присвоите всем флажкам класс селектора и сохраните свой идентификатор, чтобы вы знали, что выбрано

Вы могли бы сделать что-то вроде

  $('.selector).on('change, function(){
    active_selector = $(this).attr('id')
    value = $(this).val() 

  });
  

Ответ №4:

Вы можете использовать цикл for, атрибуты данных, структуру html или множество других опций.

Для цикла не лучшее решение, но работает

 ["a","b"].forEach( function(val){ 
    $("#"   val   "Select").on("change", function() {     
       $("#"   val   "Chosen").val($(this).val()); 
    }).trigger("change");  
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="aSelect">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="aChosen" />
<br/>
<select id="bSelect">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="bChosen" />  

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

 $("select[data-for]").on("change", function() {
    var sel = $(this);
    var txt = sel.data("for");
    $(txt).val(sel.val());
}).trigger("change");  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select data-for="#asdf">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="asdf" />
<br/>
<select data-for="#qwerty">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="qwerty" />  

Структура HTML Я понятия не имею, какова ваша структура, но вы могли бы просто использовать связь с выбором. Этот способ не очень хорош, поскольку он сломается, если ваша структура html изменится.

 $("select").on("change", function() {
    var sel = $(this);
    sel.next("input").val(sel.val());
}).trigger("change");  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="asdf" />
<br/>
<select>
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="qwerty" />  

Разобрать идентификатор Вы можете легко удалить «Выбрать» из строки и заменить его на «Выбранный», чтобы создать свой селектор для выбора текстового поля.

 $("select[id$='Select']").on("change", function(){
   var sel = $(this);
   var prefix = this.id.replace(/Select$/,"");
   $("#"   prefix   "Chosen").val(sel.val());
}).trigger("change");  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="aSelect">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="aChosen" />
<br/>
<select id="bSelect">
  <option>one</option>
  <option>two</option>
  <option>three</option>
  <option>four</option>
</select>
<input id="bChosen" />  

Как я уже говорил, есть множество способов сделать это, и я уверен, что их еще много.