2012-05-05 36 views
1

首先,我有一个数组,必须选择所有选项值,例如使用jquery validate插件来:必须选择一些选择框选项值

$require=array('volvo','saab'); 

然后,

我有选择框的x个,x是一个小于或等于 数目的选项值的

然后我有选择框例如

<select name ="car" id="0"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 

<select name ="car" id="1"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 

<select name ="car" id="2"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 

在这种情况下,我需要检查:

1)无重复选择值

2)在数组的值必须选择一个且仅一个。

我可以找出在选择框中unqiue值的检查,但如何对第二个条件?

谢谢

Using the above case as an example 

id = 0 , value = volvo 
id = 1 , value = Mercedes 
id = 2 , value = Audi 

Not valid 

id = 0 , value = saab 
id = 1 , value = Audi 
id = 2 , value = volvo 

valid 
+0

乌尔问我是否在ID选择沃尔沃= 0,那么沃尔沃不应该在标识中选择= 1,ID = 2 – Thulasiram

+0

你能解释一下你的第二个条件以例子为例。 – VibhaJ

+0

没问题,我已经添加了一个例子 – user782104

回答

2

1日的建议,请不要将同一个名称用于多个HTML元素,其无效html。 如果您只是为了选择器的目的而使用它,请改为使用class属性。

我继续进行“分而治之”的方法,它的优化程度并不是很好,但它的工作原理。

嗯,我试图在2个步骤来划分您的解决方案:

第1步:检查是否有独特性

//val is the array of values from each select box 
function checkUnique(val){ 
    var cnt = val.length; 
    for(i = 0; i < cnt; i++){ 
     for(j = i+1; j < cnt; j++){ 
      if(val[i] == val[j]){ 
       return false; 
      } 
     } 
    } 
    return true; 
} 

第2步:检查所需的值进行验证

// array of required values: 
var required = ['saab', 'volvo']; 
function validate(){ 
    var val = []; 
    $("select[name=car]").each(function(){ 
     val.push(this.value); 
    }); 
    if(checkUnique(val)){ 
     var cnt = required.length; 
     var cnt2 = val.length; 
     for(k = 0; k < cnt; k++){ 
      var flag = false; 
      for(l = 0; l < cnt2; l++){ 
       if(required[k] == val[l]){ 
        flag = true; 
       } 
      } 
      if(flag){ 
       return true; 
      } 
     } 
    }else{ 
     return false; 
    } 
} 

我在文档加载和选择框更改事件的所有事件上调用验证功能:

function showMsg(){ 
    var msg = (validate())?'OK':'NOT OK'; 
    // added html DIV tag with id="result" to show the status on change events 
    $("#result").html(msg); 
} 
$(document).ready(function(){ 
    showMsg(); 
}); 
$("select[name=car]").change(function() { 
     showMsg(); 
}); 

你可以在这里查看完整的例子上的jsfiddle: http://jsfiddle.net/LCxJw/

+0

我可以'将'php'转换为jquery吗? – user782104

+0

你肯定可以使用'var required = <?php echo json_encode($ phpArray); ?>;'你会将它转换成json对象,你可以使用for循环遍历它(x in required){required [x];} – swapnilsarwe

1

这是jQuery的方式:

$('select[name=car]').change(function() { 
    var id = $(this).attr('id'); 
    var selected = $(this).val(); 
    console.log(id + ' ' + selected); 
    $('select[name=car] option').each(function() { 
     $(this).removeAttr('selected'); 
    }); 
    $('#'+id).find('option[value='+selected+']').attr('selected', 'selected'); 
}); 

我会建议你与像第一个选项启动您的选择:

<option>Select</option> 
+0

谢谢。但我正在寻找jQuery验证规则之一,谢谢你的帮助。 – user782104