2013-04-25 71 views
0

美好的一天jQuery验证 - 在3个选择框之间只选择一个选项

我有3个选择框。现在我想要做的是允许用户只在其中一个框中选择一个值,但不能超过一个框。这些框可能都是空的。

所以哟可以有以下选择之一,让提交成功:

无(---) OR 1/2/3 OR 蓝/绿/紫 或 大/中/小

<select> 
     <option>---</option> 
     <option>1</option> 
     <option>2</option> 
     <option>3</option> 
    </select> 
    <br /><br /> 
    <select> 
     <option>---</option> 
     <option>Blue</option> 
     <option>Green</option> 
     <option>Purple</option> 
    </select> 
    <br /><br /> 
    <select> 
     <option>---</option> 
     <option>Big</option> 
     <option>Medium</option> 
     <option>Small</option> 
    </select> 
    <br /><br /> 
    <input type="submit" /> 

jQuery的

$('input[type="submit"]').click(function(){ 

$('select').each(function() { 
    var i = 0; 
    if($(this).attr('option','selected').val() != "---"){ 
     i++; 
    }; 
    }); 

if(i > 1){ 
     $('input[type="submit"]').prop('disabled', true); 
     alert('You can only choose one option!'); 
} 
else { 
     alert('Form Submitted successfully'); 
} 

}); 

但是这根本不起作用。

见我JSFiddle

+0

您需要将价值属性添加到您的选项 – 2013-04-25 16:00:15

回答

1

你有没有意思是说:

http://jsfiddle.net/2DzUV/18/

$('select').on('change', function() { 
     $('select').not(this).val(""); 
    }); 
+0

哇,什么办法。爱这个解决方案 – 2013-04-25 18:19:48

2

定义您i之前each功能,让它成为click函数内部全局范围和可访问在if条件:

var i = 0; 
$('select').each(function() { 

Updated Fiddle

+0

非常感谢!关闭虽然 – 2013-04-25 18:17:04

1

,这是因为可变i的范围正在通过<select>元素列表进行迭代时复位。将第4行var i = 0;移至第2行,即在嵌套循环之外。

+0

好吧,我明白了,非常感谢! – 2013-04-25 18:20:18

1

你需要我以外每个功能的移动变量的创建,如下图所示:

$('input[type="submit"]').click(function(){ 

var i = 0; // <-- this was moved to here 
$('select').each(function() { 
    if($(this).attr('option','selected').val() != "---"){ 
     i++; 
    }; 
    }); 

if(i > 1){ 
     $('input[type="submit"]').prop('disabled', true); 
     alert('You can only choose one option!'); 
} 
else { 
     alert('Form Submitted successfully'); 
} 

}); 

由于这是该函数退出后它被摧毁的各项功能和价值的内部创建当你测试它不止一个时,它就不存在了。

+0

谢谢,不能相信我错过了。欣赏 – 2013-04-25 18:18:24

相关问题