我是JavaScript新手,我有一个问题。我有几个选择框,我必须确保没有类似的框。 我有喜欢的代码。
<select id="science_1">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select id="science_2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select id="science_3">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
所以我的JavaScript代码是这样的:
var science_array = [];
var science_count = 0;
$(".science-switch").on("click", "a", function (e) {
e.preventDefault();
if (science_count === 3) {
var select = $(this);
var type = select.data('type');
$(".science-switch-type").removeClass("active");
$(".science-switch a").removeClass("active");
select.addClass("active");
$("#type-" + type).addClass("active");
}
});
$(".u-switch").on("click", "a", function (e) {
e.preventDefault();
var select = $(this);
var type = select.data('type');
$(".u-switch a").removeClass("active");
select.addClass("active");
$(".u-type").removeClass("active");
$("#type-" + type).addClass("active");
});
$(".btn-switch").on("click", function (e) {
e.preventDefault();
var select = $(this);
var type = select.data('type');
if (select.hasClass("btn-active")) {
$(".science-switch-type").removeClass("active");
$(".science-switch a").removeClass("active");
$(".science-switch").find("[data-type=priority]").addClass("active");
$("#type-" + type).addClass("active");
}
});
$(".science-cb").on("click", ".item", function (e) {
e.preventDefault();
var el = $(this);
var check = el.data('check');
if (check === 1) {
if (el.hasClass("active")) {
el.removeClass("active");
science_array = jQuery.grep(science_array, function (value) {
return value !== el.data("id");
});
} else {
science_count = $(".science-cb .item.active").length;
if (science_count > 2) {
alert("You can Select Only 3 Box!")
} else {
el.addClass("active");
science_array.push(el.data("id"));
}
}
science_count = $(".science-cb .item.active").length;
if (science_count === 3) {
$(".btn-switch").addClass("btn-active");
$(".btn-switch").removeClass("btn-disabled");
$(".btn-switch").trigger("click");
} else {
$(".btn-switch").addClass("btn-disabled");
$(".btn-switch").removeClass("btn-active");
}
all_sciences();
}
});
function all_sciences() {
var selectValues = [];
selectValues.length = 0;
console.log("............");
$.each(science_array, function (key, value) {
selectValues.push({text: sciences[value][0], value: value})
});
$('.all-sciences').empty();
$.each(selectValues, function (key, value) {
$('.all-sciences')
.append($("<option></option>")
.attr("value", value['value'])
.text(value['text']));
});
$("#science_1").val(science_array[0]);
$("#science_2").val(science_array[1]);
$("#science_3").val(science_array[2]);
}});
所以我希望用户选择3个数字,但是数字必须等于1,2,3、2,1,3或3,2,1,但不能等于1,2,1的2,2,1 ,3或1,1,1等。该怎么办?
谢谢!
答案 0 :(得分:0)
我无法理解您脚本的某些部分。我修改了您的html一点。我在每个选择框中插入了一个没有值的选项。完成所有选择后,我检查了重复的选择。如果没有重复项,那么我将在选择框中填充最终选择,否则将其留空。希望这会有所帮助。
<h3>Science</h3>
<select id="science_1" class="science" onchange="all_sciences();">
<option value="">Please select</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select id="science_2" class="science" onchange="all_sciences();">
<option value="">Please select</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select id="science_3" class="science" onchange="all_sciences();">
<option value="">Please select</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<h5>Final selection</h5>
<select id="all-sciences" class="all-sciences"></select>
<script>
function all_sciences() {
var selectValues = [];
selectValues.length = 0;
console.log("............");
var allSelected = 0;
var science_array = {};
var allVals = [];
$( ".science" ).each(function() {
var thisId = $(this).attr('id');
var thisVal = $(this).val();
//console.log(thisId + " " + thisVal);
science_array[thisId] = thisVal;
allVals.push(thisVal);
});
$.each(science_array, function (key, value) {
if(value!=""){
allSelected++;
}
console.log(key + " " + value);
});
if(allSelected == 3){
var distinct = chkDuplicates(allVals,true);
console.log(distinct);
if(distinct) {
alert("Please select courses so that there are no duplicate selections.");
$('.all-sciences').empty();
}
else {
$('.all-sciences').empty();
$.each(science_array, function (key, value) {
$('#all-sciences').append('<option value="' + value + '">' + key + ' - course ' + value +'</option>');
});
}
}
}
function chkDuplicates(arr,justCheck){
var len = arr.length, tmp = {}, arrtmp = arr.slice(), dupes = [];
arrtmp.sort();
while(len--){
var val = arrtmp[len];
if (/nul|nan|infini/i.test(String(val))){
val = String(val);
}
if (tmp[JSON.stringify(val)]){
if (justCheck) {return true;}
dupes.push(val);
}
tmp[JSON.stringify(val)] = true;
}
return justCheck ? false : dupes.length ? dupes : null;
}
</script>