选择一个时如何禁用多个选择标签?

Rob*_*ood 5 javascript css jquery twitter-bootstrap

我有三个带有值的选择标签。如果我在其中一个值中选择“无限”,则我希望两个选择标签中的其余标签自动切换到相同的值(“无限”)并被禁用。

如果我从第一个选择标签中选择了Unlimited选项,则第二个和第三个值应切换为Unlimited,并且输入应被禁用。

如果我选择中间选项(第二个选项),则第一个选择标签和第三个选择标签的值应自动选择为“无限”,并且两个输入字段都应被禁用。

同样,如果我从最后一个选择标记中选择了Unlimited,则第一个和第二个应该自动切换到Unlimited,并且两个输入字段都将被禁用。

是否可以通过纯CSS做到这一点?如果没有,我该如何实现?

<script src="//stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

<div class="row mb-3">
	<div class="col-12 col-md-4 col-lg-3 mb-3">
		<label>Distance per day</label>
		<select id="distancePerDay" class="form-control custom-select">
			<option value="100">100</option>
			<option value="150" selected="selected">150</option>
			<option value="200">200</option>
			<option value="250">250</option>
			<option value="300">300</option>
			<option value="350">350</option>
			<option value="400">400</option>
			<option value="Unlimited">Unlimited</option>
		</select>
	</div>
	<div class="col-12 col-md-4 col-lg-3 mb-3">
		<label>Distance per week</label>
		<select id="distancePerWeek" class="form-control custom-select">
			<option value="700">700</option>
			<option value="950" selected="selected">950</option>
			<option value="1200">1200</option>
			<option value="1450">1450</option>
			<option value="1700">1700</option>
			<option value="1950">1950</option>
			<option value="2200">2200</option>
			<option value="Unlimited" >Unlimited</option>
		</select>
	</div>
	<div class="col-12 col-md-4 col-lg-3 mb-3">
		<label>Distance per month</label>
		<select id="distancePerMonth" class="form-control custom-select">
			<option value="1500">1500</option>
			<option value="1850">1850</option>
			<option value="2250">2250</option>
			<option value="2600">2600</option>
			<option value="2950">2950</option>
			<option value="3300">3300</option>
			<option value="3650">3650</option>
			<option value="Unlimited">Unlimited</option>
		</select>
	</div>
</div>
Run Code Online (Sandbox Code Playgroud)

joy*_*nks 1

last在所有项目都标记为“无限制”之前,我将最后一个已知值存储在元素的自定义属性中。当更改为非无限时,它将记住每个选择元素的最后一个已知值并恢复它。

如果您正在寻找 jQuery 解决方案,您可以向所有选择元素添加更改事件侦听器,并且如果存在任何具有“无限制”作为值的元素,则过滤不包含当前元素的选择,并在选择“无限制”时分配禁用属性

$('select').on('change', function(e){
  const isUnlimited = $(this).val() === 'Unlimited';
  $('select')
    .not(this)
    .prop({disabled: isUnlimited})
    .attr('last', function(i,v){ return isUnlimited ? $(this).val() : v; })
    .val(function(i,v){ return isUnlimited ? 'Unlimited' : v === 'Unlimited' ? $(this).attr('last') : v; });
});
Run Code Online (Sandbox Code Playgroud)

使用 jQuery 可确保您少写多做。下面附有片段。

$('select').on('change', function(e){
  const isUnlimited = $(this).val() === 'Unlimited';
  $('select')
    .not(this)
    .prop({disabled: isUnlimited})
    .attr('last', function(i,v){ return isUnlimited ? $(this).val() : v; })
    .val(function(i,v){ return isUnlimited ? 'Unlimited' : v === 'Unlimited' ? $(this).attr('last') : v; });
});
Run Code Online (Sandbox Code Playgroud)
$('select').on('change', function(e){
  const isUnlimited = $(this).val() === 'Unlimited';
  $('select')
    .not(this)
    .prop({disabled: isUnlimited})
    .attr('last', function(i,v){return isUnlimited ? $(this).val() : v;})
    .val(function(i,v){return isUnlimited ? 'Unlimited' : v === 'Unlimited' ? $(this).attr('last') : v; });
});
Run Code Online (Sandbox Code Playgroud)

  • 好吧,但你的代码不合逻辑,当“Unlimited”值再次更改为“正常”值时,另外两个值保留在“Unlimited”上,并且对它们的任何更改都会将另一个值设置为“Unlimited”,所以我们可以“ t 返回 3 个“正常”值..! (2认同)