启用基于单选按钮选中的单个或多个复选框
Enable single or multiple checkboxes checked based on radio button
我有一个简单的表单,带有单选按钮和复选框,用户可以选择下载单一或多种语言包。如果单个选项被选中,复选框应该像单选按钮一样,只能选中一个复选框。如果用户选择多个选项,他/她可以勾选任意数量的复选框。我如何使用JQuery/JavaScript实现这一点?任何帮助将非常感激,因为我是完全新的。下面是一个简单的HTML表单:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p>Language options:</p>
<form id="form1" name="form1" method="post" action="">
<p>
<label>
<input type="radio" name="langOptionRadioBtn" value="Single" id="langOptionRadioBtn_0" />
Single</label>
<label>
<input type="radio" name="langOptionRadioBtn" value="Multi" id="langOptionRadioBtn_1" />
Multi</label>
<br />
</p>
</form>
<p>Languages: </p>
<form id="form2" name="form2" method="post" action="">
<p>
<label>
<input type="checkbox" name="langCheckBoxes" value="English" id="langCheckBoxes_0" />
English</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="French" id="langCheckBoxes_1" />
French</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Spanish" id="langCheckBoxes_2" />
Spanish</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Russian" id="langCheckBoxes_3" />
Russian</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Arabic" id="langCheckBoxes_4" />
Arabic</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Chinese" id="langCheckBoxes_5" />
Chinese</label>
<br />
</p>
</form>
</body>
</html>
你只需要切换输入类型点击:
$("#langOptionRadioBtn_0").click(function(){
$('#form2 input[type="checkbox"]').each(function(){
$(this).prop("type", "radio");
});
});
$("#langOptionRadioBtn_1").click(function(){
$('#form2 input[type="radio"]').each(function(){
$(this).prop("type", "checkbox");
});
});
您可以在http://jsfiddle.net/um1qgexr/测试代码。
首先,您不需要两个单独的表单。听起来好像所有的数据都应该发送到同一个地方,因此没有理由将单选按钮和复选框包装在单独的<form>
标记中。您的标记可以像这样:
<p>Language options:</p>
<form id="form1" name="form1" method="post" action="">
<p>
<label>
<input type="radio" name="langOptionRadioBtn" value="Single" id="langOptionRadioBtn_0" />
Single</label>
<label>
<input type="radio" name="langOptionRadioBtn" value="Multi" id="langOptionRadioBtn_1" />
Multi</label>
<br />
</p>
<p>Languages: </p>
<p>
<label>
<input type="checkbox" name="langCheckBoxes" value="English" id="langCheckBoxes_0" />
English</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="French" id="langCheckBoxes_1" />
French</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Spanish" id="langCheckBoxes_2" />
Spanish</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Russian" id="langCheckBoxes_3" />
Russian</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Arabic" id="langCheckBoxes_4" />
Arabic</label>
<br />
<label>
<input type="checkbox" name="langCheckBoxes" value="Chinese" id="langCheckBoxes_5" />
Chinese</label>
<br />
</p>
</form>
这里是jQuery代码,你可以用它来做你所建议的。其思想是,每次用户单击复选框时,我们都会检查是否选中了multi。如果是,那么我们不需要改变复选框的行为,但如果不是,那么我们清除所有的复选框,除了用户实际选择的那个。
var $form = $('#form1');
var $checkboxes = $('input[type=checkbox]');
var $selectionType = $('input[type=radio]');
var $output = $('#output');
var isMulti = false;
// Listen to change event on the radio buttons and set isMulti
$selectionType.on('change', function( e ) {
// Check the value of what radio button was clicked
isMulti = $( e.target ).val() === 'Multi';
// Clear all selected checkboxes if user clicked "single"
if( !isMulti ) {
$checkboxes.each( function( idx, item ) {
$( item ).prop( 'checked', false );
});
}
});
// Listen to clicks on checkboxes
$checkboxes.on('change', function( e ) {
// Store what was just clicked
var $this = $( e.target );
// If Multi is not selected, then remove the check from all other checkboxes
if( !isMulti ) {
$checkboxes.each( function( idx, item ) {
var $item = $( item );
// Do not un check if this is the checkbox the user clicked
if( $item.attr('id') === $this.attr('id') ) {
return true;
}
$item.prop('checked', false );
});
}
});
这里是一个JS摆弄它的工作:http://jsfiddle.net/grammar/pdx8gccu/2/
希望这对你有帮助!
一种快速而简单的方法是在选择一个或另一个时更改类型。
<label>
<input type="radio" name="langOptionRadioBtn" value="Single" id="langOptionRadioBtn_0" onclick="updateBoxes('radio');" />
Single
</label>
<label>
<input type="radio" name="langOptionRadioBtn" value="Multi" id="langOptionRadioBtn_1" onclick="updateBoxes('checkbox');" />
Multi
然后更新盒子的函数
function updateBoxes(type) {
var boxes = document.getElementById( 'form2' ).getElementsByTagName( 'input' );
for( var i=0; i<boxes.length; i++ ) {
boxes[i].type=type;
boxes[i].checked = false;
}
}
给你:演示
$('input[type=checkbox]').change(function(e){
if($('input[type=radio]:checked').length==0){
$(this).prop('checked',!$(this).prop('checked'));
return false;
}
else if($('input[type=radio]:checked').val()=='Single'){
$('input[type=checkbox]').not(this).prop('checked',false);
}
});
$('input[type=radio]').click(function(){
$('input[type=checkbox]').prop('checked',false);
});
如果您单击任何单选按钮,则所有复选框都被取消选中,如果没有选中单选按钮,则用户不能选择复选框,其余部分按照问题的要求
我看到这里的答案,说改变为单选,但也可以使用复选框:
var allowMultiLang = false;
$('#form1 input[type=radio]').on('change', function() {
// get the selected radio
var selectedRadio = $('input[type=radio]:checked');
// if the selected is 'Single'
if(selectedRadio.val() == 'Single') {
allowMultiLang = false;
// uncheck all
$('#form2 input[type=checkbox]:checked').prop('checked', false);
// if the selected is 'Multi'
} else if(selectedRadio.val() == 'Multi') {
allowMultiLang = true;
}
});
$('#form2 input[type=checkbox]').on('change', function() {
if(allowMultiLang === false) {
if($(this).is(':checked')) {
// uncheck all BUT this
$('#form2 input[type=checkbox]').not(this).prop('checked', false);
}
}
});
演示:http://jsfiddle.net/b5Le3uLb/
我写的方法如下:
1)找到被选中的单选按钮。
2)如果之前选中了复选框,并且选中的复选框的数量较大选择1,然后清除所有的复选框。
3)当单个选项被选中时,调用一个方法取消选中其余的复选框。
4)当选择多选项时,取消绑定导致取消选择其他复选框的方法,从而可以选中多个复选框。
我知道我的代码很长,但是,我认为它会让你开始,它是可读的。
来自小提琴的例子是
$('.language_options').on('click', function() {
ClearCheckBoxes();
if(this.id=='langOptionRadioBtn_0')
{
$('input[name="langCheckBoxes"]').on('change', function() {
ClearOtherCheckBoxes(this,'single');
});
}
else
{
$('input[name="langCheckBoxes"]').unbind();
}
});
这是小提琴的链接。
http://jsfiddle.net/5wadfh3o/16/
这是在FireFox 31.0上测试的
谢谢。
- 使用jquery选中/取消选中单个复选框
- 获取带有textarea的复选框,并在单个jquery中进行选择
- 单个复选框的 JavaScript 验证在 Perl CGI 中失败
- 应用按钮集后禁用单个复选框
- 在单个按钮上选中所有和取消选中所有不适用于单个复选框.请给我解决方案
- jQuery / JavaScript 复选框显示多个和单个选择中选中的复选框的数量
- 复选框选中功能,用于单个页面中的两组复选框,不能单独调用功能
- Extjs使用复选框模型在网格上拖放单个项目
- 字段长度不适用于单个复选框
- 单个复选框的javascript中的复选框验证失败
- 如何使用ng-repeat从包含5行的表传递单个复选框值
- 启用基于单选按钮选中的单个或多个复选框
- 单击单个复选框时选择表中的所有复选框
- 计算单个复选框被选中的次数
- 启用多个文本框和单个复选框
- 选择单个复选框时,选中其他复选框
- 将数组中的单个复选框值发送到服务器
- 如何设置单个复选框来切换/取消切换其他复选框
- 如何遍历Div并提取单个复选框值
- Parsley.js单个复选框未被验证