опция javascript в форме для передачи двух значений, одного для скрытой / видимой функциональности, второго для значения данных

#javascript #forms #option

#javascript #формы #вариант

Вопрос:

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

У меня есть код, работающий с использованием value="0" и суммированием для каждой строки.

 <option value="4">Chordata</option> 
 

К сожалению , при этом значение передавалось 4 через форму , а не через текст Chordata .

До сих пор я выяснял, как передать второе значение:

 <option value="4" data-value="Chordata">Chordata</option>
 

Используя оповещение, я могу видеть выбранные данные.

 $('#sel1_1').on('change', function() {
  alert('value is:'   $("#sel1_1 option:selected").data('value')
  )
});
 

В коде var ch находится выбранный #id из <select> тега:

 <select class="form-control" name='phylum' id="sel1_1" style="display:none;">
  <!-- Animalia -->
  <option value="0" data-value="">Choose</option>
  <option value="1" data-value="Annelid">Annelid</option>
  <option value="2" data-value="Arthropod">Arthropod</option>
  <option value="3" data-value="Bryozoa">Bryozoa</option>
  <option value="4" data-value="Chordata">Chordata</option>
  <option value="5" data-value="Cnidaria">Cnidaria</option>
  <option value="6" data-value="Echinoderm">Echinoderm</option>
  <option value="7" data-value="Mollusc">Mollusc</option>
  <option value="8" data-value="Nematode">Nematode</option>
  <option value="9" data-value="Platyhelminthes">Platyhelminthes</option>
  <option value="10" data-value="Rotifer">Rotifer</option>
  <option value="11" data-value="Sponge">Sponge</option>
</select>
 

Итак, когда выбран вариант 4, появляется предупреждение, но как мне добавить $("#sel1_1 option:selected").data('value'); его в javascript? Ниже вы увидите, что я назначил data в качестве data-value , но, очевидно, это нарушит сценарий. Поэтому я хочу сохранить var ch = $("#sel1_1").val(); функциональность выбора, но мне также нужен какой-то способ передать реальное значение data-value var data .

Я мог бы переключить значение value с текстом, но тогда мне нужно value-data , чтобы оно было целым числом, ответственным за отображение следующего выпадающего списка.

Это часть текущего работающего скрипта:

 $("#sel1_1").change(function() {
  var select_nums = 11;
  $('#sel2_0').css({'display':'block'});
  var ch = $("#sel1_1").val(); // original value
  // var data = $("#sel1_1 option:selected").data('value'); //new code
  if(ch==0){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==1){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==2){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==3){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==4){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==5){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==6){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==7){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==8){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==9){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==10){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }else if(ch==11){
    for (var i = 1; i < select_nums; i  ) {
      $('#sel2_' i).css({'display':'none'});
    }
    $('#sel2_' ch).css({'display':'block'});
  }
});
 

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

1. «значение 4 через форму». Я этого не вижу. Без атрибута name вы должны использовать AJAX, чтобы вы могли передавать что угодно, например SelectElement.options[SelectElement.selectedIndex].text .

2. @StackSlave значение 4 — это то, что передается для этой опции, 4-й вариант. var ch = $("#sel1_1").val(); это то, что собирает то, что в настоящее время используется в качестве значения в форме. Присваивая второе значение параметру data-value="some text" , который я использую $("#sel1_1 option:selected").data('value'); , я могу получить доступ ко второму значению, но как мне интегрировать его в поставляемый скрипт? Как мне указать форме использовать data-value , а не value ?

3. хорошо, глупо просто, используйте в value качестве значения, которое будет отправлено $("#sel1_1 option:selected").data('value'); , для функциональности выбора.

4. Помимо нескольких логических установщиков и получателей (например, VideoElement.controls = true) , HTML-атрибуты в JavaScript (включая jQuery) являются строками. Чтобы преобразовать строку в число в JavaScript, вы просто ставите перед строкой, например let ch = $('#sel1_1').val(); . Вы также можете использовать parseInt($('#sel1_1').val()) или parseFloat($('#sel1_1').val()) , второе полезно для чисел с плавающей запятой.