在提交表单之前如何确保所选择的选项是不同的
how to make sure that selected options are different before submit the form?
<select class="distinctrank" name="rank[]" required>
<option value="">Select</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
<select class="distinctrank" name="rank[]" required>
<option value="">Select</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
<select class="distinctrank" name="rank[]" required>
<option value="">Select</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
我试图阻止用户两次选择相同的选项
,
- value 1 -> B
- value 2 -> C
- value 3 -> A
But not allow
value 1 -> B
value 2 -> B
value 3 -> A
我不能用这个:答案因为我有8个<select>
和8个<option>
,并且允许用户更改他/她的选项。
不幸的是,我不能使用单个选择设置为"multiple"。我找到了这个答案刚才,但因为我不jquery或Javascript很好,我不能使它的工作没有选择标签内表:这就是答案
更新:我找到了一个更好的方法,但是我遇到了一些问题。我试图修改这段代码:输入标签,使其与选择标签一起工作。我现在面临的问题是,每次你选择相同的选项两次,错误"请输入一个唯一值"显示(我想看到它,当用户选择相同的值两次或更多),当你改变的值"请输入一个唯一值"确实消失了。但是,它保持一个"这个字段是必需的"警告后面(当点击一个新的选择标签)。因此,"这个字段是必需的"直到用户为所有选择标记选择一个选项才会消失。下面是Jquery代码:
jQuery.e
jQuery.validator.addMethod("notEqualToGroup", function(value, element, options) {
// get all the elements passed here with the same class
var elems = $(element).parents('form').find(options[0]);
// the value of the current element
var valueToCompare = value;
// count
var matchesFound = 0;
// loop each element and compare its value with the current value
// and increase the count every time we find one
jQuery.each(elems, function() {
thisVal = $(this).val();
if (thisVal === valueToCompare) {
matchesFound++;
}
});
// count should be either 0 or 1 max
if (this.optional(element) || matchesFound <= 1) {
//elems.removeClass('error');
return true;
} else {
//elems.addClass('error');
}
}, jQuery.validator.format("Please enter a Unique Value."))
// validate form
$("#signupform").validate({
rules: {
'rank[]': {
required: true,
notEqualToGroup: ['.distinctrank']
},
},
});
我想知道你是否可以简单地使用单个选择集为"multiple"…
<select multiple class="form-control" name="rank[]">
<option value="">Select</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
似乎是合适的:-)
你的代码…
rules: {
'rank[]': { // <-- will only match one of your three
required: true, ....
您不能让三个不同的select
元素都共享同一个name
,在您的例子中是rank[]
。
jQuery Validate插件要求每个表单数据输入元素包含一个唯一的name
。这就是插件跟踪表单输入的方式,并且没有解决这个问题的方法。您必须包含索引或更改name
。
rules: {
'rank[1]': {
// rules
},
'rank[2]': {
// rules
},
'rank[3]': {
// rules
}
}
如果三个都使用相同的规则,那么您可以使用.rules()
方法一次性应用它们…
$("#signupform").validate({ // plugin initialization
// other rules & options
});
$('[name^="rank"]').each(function() {
$(this).rules('add', {
required: true,
notEqualToGroup: ['.distinctrank']
});
});
$('[name^="rank"]')
匹配所有name
以rank
开头的元素。然后.each()
将该规则应用于与选择器匹配的每个实例。
您可以尝试这样做:
$(document).ready(function() {
$('select').change(function() {
self = $(this);
choosen = $(this).val();
$('select').not(self).each(function() {
if ($(this).val() == choosen) {
// $(this).prop('disabled', true);
alert('Option is already selected');
$(self).val($(this).find("option:first").val());
}
});
});
});
这实际上是你在另一个答案中找到的代码的部分实现。注释行会禁用已经选择的选项,但是…这样用户就不能改变他们的想法了……然而,我可能会使用评论行(edit:probably not, it causes other problems)
,而不是恼人的警报->因为,警报-如果用户试图改变他的想法-用户体验不是那么好,再次…
演示:http://jsfiddle.net/dq9j4s32/2
- 下拉选择可自动更改第二个下拉选择
- 如何使用jQuery选择下拉列表的值
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 按照选项卡索引的顺序循环一个jQuery选择
- 在动态创建的元素上获取对特定选择器的引用
- Amd,希望确保某个东西总是最后执行
- AngularJS-在JSON选择器中使用变量名
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何确保只选择了一个h:selectOneRadio按钮
- jQuery和选择器:我如何确保确实存在我正在寻找的元素
- 如何创建共享单个列表的链接下拉列表,并确保只能在一个下拉列表中选择每个值
- 如何确保已选择单选按钮
- 请确保立即选择iframe
- 在提交表单之前如何确保所选择的选项是不同的
- 如何确保在快速选择单选按钮时只调用一个事件处理程序
- Jquery如何确保用户已经为表单上的所有选择菜单选择了一个值
- 如何确保如果值在一个字段中输入,其他(伴随)字段/下拉列表必须填写/选择
- 如何确保如果下拉选择是第一项,则不会发生任何事情
- 如何确保用户在不使用onSubmit - javascript的情况下从选择列表中选择某些内容