Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当在“多选”中选择了特定选项时才显示输入字段_Javascript_Html - Fatal编程技术网

Javascript 仅当在“多选”中选择了特定选项时才显示输入字段

Javascript 仅当在“多选”中选择了特定选项时才显示输入字段,javascript,html,Javascript,Html,我有一个多选框,如下例所示 <select name="geolocation_country[]" class="form-control form-control-chosen" id="geolocation_country" data-placeholder="Please select..." multiple> <option value="AF">Afghanistan</option&

我有一个多选框,如下例所示

<select name="geolocation_country[]" class="form-control form-control-chosen" id="geolocation_country" data-placeholder="Please select..." multiple>
                                <option  value="AF">Afghanistan</option>
                                <option  value="IN">India</option>
                                <option  value="DZ">Algeria</option>
                                <option  value="DS">American Samoa</option>
                                <option  value="AD">Andorra</option>
                                <option  value="AO">Angola</option>
                                <option  value="AI">Anguilla</option>
                                <option  value="AQ">Antarctica</option>
                                <option  value="AG">Antigua and Barbuda</option>
                                <option  value="AR">Argentina</option>
                                <option  value="AM">Armenia</option>
                                <option  value="AW">Aruba</option>
                                <option  value="AU">Australia</option>
                                <option  value="AT">Austria</option>
                                <option  value="AZ">Azerbaijan</option>
                                <option  value="BS">Bahamas</option>
</select>
如果仅选择印度,则会显示“州选择”框。但如果我选择印度和其他国家,国家搜索框就会消失。 如果在国家中选择了印度,是否可以创建一个JS来显示印度的状态框?不管是否选择了其他国家。

使用jQuery代替DOM的plain.value

然后应用数组方法.includes或.indexOf检查中的值是否已被选中。

使用jQuery代替DOM的plain.value

然后应用数组方法.includes或.indexOf检查中的值是否已被选中。

使用onchange=showselectedvalues此;在选择器elment id=地理位置\国家/地区上

然后用这个:

function showSelectedValues(self){
  let selectedValues = Array.from(self.selectedOptions)
    .map(option => option.value);
  console.log(selectedValues);      
}
它将在数组中为您提供值,您可以循环并设置隐藏和显示的条件。

使用onchange=showselectedvalues此;在选择器elment id=地理位置\国家/地区上

然后用这个:

function showSelectedValues(self){
  let selectedValues = Array.from(self.selectedOptions)
    .map(option => option.value);
  console.log(selectedValues);      
}

它将在数组中为您提供值,您可以循环并设置隐藏和显示的条件。

我认为最好使用countries对象数组及其状态,无论您从AJAX请求中获取这些值还是静态创建。在选择时,创建新的选择并将所选元素附加到$'show\u geolocation\u region'或其他任何内容中。请核对:

您的HTML:

<select name="geolocation_country[]" class="form-control form-control-chosen" id="geolocation_country" data-placeholder="Please select..." multiple>
</select>
<div id="show_geolocation_region">
</div>
您的JQUery:

$(document).ready(function(){
  var select = $("#geolocation_country");
  countries.forEach(function(country){
    var option = $('<option/>');
    option.attr({ 'value': country.value }).text(country.name);
    select.append(option);
  })
});

$("#geolocation_country").on('change', function() {
  var selectedValue = $(this).val();
  $('#show_geolocation_region').html('');
  selectedValue.forEach(function(countryValue){
    var sel = $('<select>').appendTo('#show_geolocation_region');
    sel.attr('multiple', true);
    sel.attr('name', 'geolocation_region_'+countryValue);
    sel.attr('id', 'statesSelect');
    sel.attr('class', 'form-control form-control-chosen');
    var selectedCountry = countries.find(function(country){
      return country.value = countryValue;
    });
    selectedCountry.states.forEach(function(state){
      sel.append($("<option>").attr('value',state.value).text(state.name));
    })

  });
});

我认为最好是将countries对象数组与它们的状态结合起来,不管您是从AJAX请求中获取这些值还是静态创建这些值。在选择时,创建新的选择并将所选元素附加到$'show\u geolocation\u region'或其他任何内容中。请核对:

您的HTML:

<select name="geolocation_country[]" class="form-control form-control-chosen" id="geolocation_country" data-placeholder="Please select..." multiple>
</select>
<div id="show_geolocation_region">
</div>
您的JQUery:

$(document).ready(function(){
  var select = $("#geolocation_country");
  countries.forEach(function(country){
    var option = $('<option/>');
    option.attr({ 'value': country.value }).text(country.name);
    select.append(option);
  })
});

$("#geolocation_country").on('change', function() {
  var selectedValue = $(this).val();
  $('#show_geolocation_region').html('');
  selectedValue.forEach(function(countryValue){
    var sel = $('<select>').appendTo('#show_geolocation_region');
    sel.attr('multiple', true);
    sel.attr('name', 'geolocation_region_'+countryValue);
    sel.attr('id', 'statesSelect');
    sel.attr('class', 'form-control form-control-chosen');
    var selectedCountry = countries.find(function(country){
      return country.value = countryValue;
    });
    selectedCountry.states.forEach(function(state){
      sel.append($("<option>").attr('value',state.value).text(state.name));
    })

  });
});

因此,将this.value==IN替换为$this.val.indexOfIN>0您可以修改js代码,使这个答案更详细一点吗?嗯。那对我不起作用。如果我选择India,什么也不会发生。@David:应该是.indexOfIN>=0,所以将这个.value==IN替换为$this.val.indexOfIN>0您可以修改js代码使这个答案更详细一点吗?嗯。那对我不起作用。如果我选择India,什么也不会发生。@David:应该是.indexOfIN>=0