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