我有一个带有一组下拉字段的表单,每个字段的默认值为“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的上下文中给我一些指导吗?
答案 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
disabled
和selected
这样的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');
});
});