需要在多个选择字段上验证唯一的特定值

时间:2011-10-21 15:12:34

标签: jquery select validation

我有一个带有一组下拉字段的表单,每个字段的默认值为“0”,可用值为1-3。这些作为优先选择,用户选择他们的前3项。每个选择字段名称都是唯一的,并在PHP foreach循环中填充 - 我在下面的示例中只是将其称为“N”。

<select class="variable_priority unique required" name="select-N">
    <option value="0"></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

“0”值用作非优先选择的默认值/预设值。使用described here技术,我已经成功修改了JQuery Validate,以确保用户无法通过比较类“variable_priority”在多个下拉列表中选择1,2或3:

$('.variable_priority').each(function () {
            if ($(this).val() === value && $(this).val() > 0) {
                timeRepeated++;
            }
        });

但是,我仍然需要验证用户确实在任何选择字段中输入了值1,2和3,并且没有跳过任何值。任何人都可以在JQuery Validate的上下文中给我一些指导吗?

3 个答案:

答案 0 :(得分:2)

重新处理JS Fiddle的要求后。 http://jsfiddle.net/halfcube/aLvc6/

我认为这可能更接近您的要求

HTML

<div class="selects">
    <select class="variable_priority unique required" name="select[]" required>
        <option value="0">Select</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <select class="variable_priority unique required" name="select[]" required>
        <option value="0">Select</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <select class="variable_priority unique required" name="select[]" required>
        <option value="0">Select</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <select class="variable_priority unique required" name="select[]" required>
        <option value="0">Select</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
</div>
<div class="value">
    0
</div>

CSS

.valid{
    box-shadow:0 0 10px green;
    -webkit-box-shadow:0 0 10px green;
    -moz-box-shadow:0 0 10px green;
}

的JavaScript

$(document).ready(function() {

    function checkSelected(val) {
        var ret = false;
        $(".variable_priority").each(function() {
            if ($(this).val() === val) {
                ret = true;
            }
        });
        return ret;
    }

    function totalValue() {
        var total = 0;
        $(".variable_priority:first option[value!=0]").each(function() {
            total = total + parseInt($(this).val(), 10);
        });
        return total;
    }
    function totalSelectedValue(){
        var total = 0;
        $(".variable_priority option:selected").each(function() {
            total = total + parseInt($(this).val(), 10);
        });
        return total;
    }
    $('.value').html(totalValue());
    $('.variable_priority').change(function() {
   //     variable_priority = variable_priority + parseInt($(this).val(), 10);
        $('.value').html(totalSelectedValue() + " out of " + totalValue());

        $('option', this).each(function() {
            if (checkSelected($(this).val()) && $(this).val() !== "0") {
                $('.variable_priority option[value=' + $(this).val() + ']').attr('disabled', true);
            } else {
                $('.variable_priority option[value=' + $(this).val() + ']').removeAttr('disabled');
            }
        });
        if (totalSelectedValue() === totalValue()) {
            $('.selects').removeClass('invalid').addClass('valid');
        } else {
            $('.selects').removeClass('valid').addClass('invalid');
        }
    });
});

现在我必须重新开始工作。

享受

答案 1 :(得分:0)

我首先会让浏览器完成大部分工作,因此我会使用像required disabledselected这样的HTML5属性来进行良好的测量。

你可以尝试这样的事情。

<select class="variable_priority unique required" name="select-N" required>
  <option value="0" disabled></option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

这应该足以允许浏览器将blank显示为默认值,然后一旦用户选择了他们无法再次选择blank的选项。

对于安全测试,我会将一个JavaScript端验证绑定到表单提交事件,以确保表单有效。

像这样;

$("form").bind("submit",function(){
  if($("select.variable_priority :selected").length >= $("select.variable_priority").length){
    return true;
  }else{
    return false;
  }
});

此if语句将检查selected下拉列表的数量与页面上下拉总数的比较。如果匹配则表单有效。

我希望这可以帮助你。

答案 2 :(得分:0)

试试这个:

<script>$(document).ready(function() {
$('select').change(function() {
    $('option[value=' + $(this).val() + ']').attr('disabled', 'disabled');
});

});