多个输入,用户只能在其中一个输入中输入
Multi inputs which user can only enter in one of them
考虑一个有许多输入的表单,每个输入都有一个与之相关的单选按钮。用户选择一个收音机,将显示相关的输入。
http://jsfiddle.net/0uL6zzja/
如果输入的数量增加(例如15),我们将在js中得到所有单选按钮的大量样板代码(它们都做同样的事情,禁用其他输入,启用我的输入)
js为:
$('#precentRadio').change(function () {
$("#dolorsInput").attr("disabled", true);
$("#precentInput").attr("disabled", false);
})
$('#dolorsRadio').change(function () {
$("#precentInput").attr("disabled", true);
$("#dolorsInput").attr("disabled", false);
})
有什么方法可以最小化代码吗?!
工作演示
为触发禁用/启用输入的按钮使用类名,为输入使用类名。全部禁用它们,并通过从单击的按钮遍历到最近的.input-group
,然后返回到输入字段来启用所需的。
jQuery(这就是全部)
$('.some-button').change(function () {
$('.some-input').prop("disabled", true);
$(this).closest('.input-group').find('.some-input').prop("disabled", false);
})
HTML
Please enter amount in "$" or "%":<p/>
<div class="col-sm-4">
<div class="input-group">
<span class="input-group-addon">
<input name="switched" checked="checked" type="radio" class="some-button">
</span>
<div class="input-group input-group-applyed-input-manager">
<span class="input-group-addon">$</span>
<input class="form-control some-input" type="text" >
</div>
</div>
</div>
<div class="col-sm-4">
<div class="input-group">
<span class="input-group-addon">
<input name="switched" type="radio" class="some-button">
</span>
<div class="input-group input-group-applyed-input-manager">
<span class="input-group-addon">%</span>
<input class="form-control some-input" type="text" disabled>
</div>
</div>
</div>
(repeat)
此外,disabled="true"
是不正确的,它不是HTML中的布尔值,它要么存在,要么不存在,您应该使用.prop()
而不是attr()
来禁用。
您可以向单选按钮添加一个公共类,并为所有单选按钮附加一个事件。从那里,您可以使用DOM遍历来只更改相关的文本输入。类似这样的东西:
<div class="col-sm-4">
<div class="input-group">
<span class="input-group-addon">
<input name="switched" class="input-toggle" checked="checked" type="radio" />
</span>
<div class="input-group input-group-applyed-input-manager">
<span class="input-group-addon">$</span>
<input class="form-control" type="text" />
</div>
</div>
</div>
$('.input-toggle').change(function() {
$('.input-group input[type="text"]').prop('disabled', true); // disable all
$(this).closest('.input-group').find('input[type="text"]').prop('disabled', false);
});
小提琴示例
当然。将单选按钮与类似功能关联的正确方法是使用常见的name
而不是class
。这使得单选按钮互斥(因此组中只有一个选项可以同时处于活动状态)。
然后,不是将jQuery .change
处理程序添加到单个项目,而是添加到名称为$('input:radio[name=whatever]').change( ... );
的所有单选按钮。
在函数内部,可以很容易地编写代码,使用jQuery的next()
方法启用直接位于单击的单选按钮后面的文本字段,并禁用组中其他单选按钮之后的所有其他文本字段。
如果您不能更改HTML,但单选按钮和输入的id
s将继续匹配(xxxRadio
和xxxInput
),则可以通过查找所选单选按钮的id
并启用相应的输入来处理问题:
$('input[name=switched]').change(
function() {
var selected = $('input[name=switched]:checked');
var selId = selected.attr('id');
var inpId = '#' + selId.replace(/Radio$/, 'Input');
var activeInput = $(inpId);
$('input.form-control').prop('disabled' ,true);
activeInput.prop('disabled', false);
}
);
@import url('http://getbootstrap.com/dist/css/bootstrap.css');
div.input-group > div.input-group > span.input-group-addon {
border-radius: 0px !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Please enter amount in "$" or "%":<p/>
<div class="col-sm-4">
<div class="input-group">
<span class="input-group-addon">
<input name="switched" checked="checked" type="radio" id="dolorsRadio">
</span>
<div class="input-group input-group-applyed-input-manager">
<span class="input-group-addon">$</span>
<input class="form-control" type="text" id="dolorsInput">
</div>
</div>
</div>
<div class="col-sm-4">
<div class="input-group">
<span class="input-group-addon">
<input name="switched" type="radio" id="precentRadio">
</span>
<div class="input-group input-group-applyed-input-manager">
<span class="input-group-addon">%</span>
<input class="form-control" type="text" id="precentInput" disabled="true">
</div>
</div>
</div>
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 用户在文本框中输入一个数字,并根据使用 PHP 输入的数字重定向到另一个网页
- 如何要求用户输入一个介于 1 和 50 之间的整数,然后小程序打印出一行这个星数
- Javascript提示和警报输入一个数字,它将循环,您将输入数字以获得它的平均值
- 如果使用jquery输入一个字段,则自动填充其他字段
- 一直要一个数字,直到输入一个偶数
- 需要用户输入一个随机数,然后提醒用户数字 ibnputted
- 以 jQuery 为中心的文本框在 Safari 中输入一个字符后失去焦点
- 如何将我的 Google 地图功能从自动查找我的位置更改为让我输入一个位置
- 如何让两个不同的输入(一个用于移动设备,一个用于桌面)修改同一变量
- 允许html输入框只输入一个完整的数字和精确的十进制.5
- 我怎样才能使我的表单输入不返回任何结果,当它输入一个空查询
- 用TypeScript输入一个约束字典
- 只有在用户输入一个字符后,AngularJS才会调用数据库
- 在javascript中输入一个正斜杠
- 如何使移动
- 如何确保用户在Javascript中输入一个有效的数字
- Rails 3 -设计'请输入一个电子邮件地址'弹出消息,即使禁用了validatable
- 在输入中输入一个值
- 输入一个返回的可观察对象