I'm using a <select>
element in a form I'm making that allows multiple selections, but I want to limit the maximum amount of selections to 10. Is this possible using JavaScript or jQuery?
Here is some full code for you to use:
$(document).ready(function() {
var last_valid_selection = null;
$('#testbox').change(function(event) {
if ($(this).val().length > 5) {
alert('You can only choose 5!');
$(this).val(last_valid_selection);
} else {
last_valid_selection = $(this).val();
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<select multiple id="testbox" size="10">
<option value='1'>First Option</option>
<option value='2'>Second Option</option>
<option value='3'>Third Option</option>
<option value='4'>Fourth Option</option>
<option value='5'>Fifth Option</option>
<option value='6'>Sixth Option</option>
<option value='7'>Seventh Option</option>
<option value='8'>Eighth Option</option>
<option value='9'>Ninth Option</option>
<option value='10'>Tenth Option</option>
</select>
last_valid_selection
is an array? –
Odessa last_valid_selection
out of the global scope and into the ready
anonymous function. –
Alaster .val()
to get all values (unlike .value
in JS). Here is a demo. The problem is that it doesn't work in the rare case with repeated values. –
Airline This would limit the user to 3 options:
$("select").on("click", "option", function () {
if ( 3 <= $(this).siblings(":selected").length ) {
$(this).removeAttr("selected");
}
});
Fiddle: http://jsfiddle.net/2GrYk/
This answer works in those cases:
- Normal click
- Only mousedown (mouse is moved outside before mouseup)
- Keyboard
- If there are different options with the same value
Code:
$('#mySelect').on('change', function() {
if (this.selectedOptions.length < 4) {
$(this).find(':selected').addClass('selected');
$(this).find(':not(:selected)').removeClass('selected');
}else
$(this)
.find(':selected:not(.selected)')
.prop('selected', false);
});
Or, for old browsers that don't support selectedOptions
,
$('#mySelect').on('change', function() {
var $sel = $(this).find(':selected');
if ($sel.length < 4) {
$sel.addClass('selected');
$(this).find(':not(:selected)').removeClass('selected');
}else
$(this)
.find(':selected:not(.selected)')
.prop('selected', false);
});
Using jQuery you can attach a function to the change event and since it is a multiple select the val() will be an array. You can always check the length of the array and do something if its a predefined size. The following code demonstrates how you will know how many items are selected.
$("#select").change(function(){
alert($(this).val().length);
});
$('#myselectbox_id').val(null);
–
Odessa $("#select").val([]);
to set no options in the select list. –
Printery figured it out! here's the resulting code:
$(document).ready(function(){
var last_valid_selection = null;
var selected = "";
$("#recipient_userid").change(function(event){
if ($(this).val().length > 10) {
alert('You can only choose 10!');
$(this).val(last_valid_selection);
} else {
last_valid_selection = $("#recipient_userid").val();
$("#recipient_userid option:selected").each(function () {
selected += "<li>" + $(this).text() + "</li>";
});
$("#currentlySelected").html(selected);
selected = "";
}
}).change();
});
Thanks for all your help guys!
I basically merged a couple of the provided answers to make something specific to a particular ID:
$("#mySelect").on("click", "option", function(){
var max = 3;
if ( max <= $(this).siblings(":selected").length ) {
alert("Only " + max + " selections allowed.");
$(this).removeAttr("selected");
}
});
Rob
You can use jQuery
$("select").change(function () {
if($("select option:selected").length > 3) {
//your code here
}
});
Here a pure vanilla JavaScript example, based on jilu's example.
const selectEls = document.querySelectorAll('select[multiple]');
selectEls.forEach((selectEl) => {
selectEl.addEventListener('change', (e) => {
const currentEl = e.currentTarget;
let is = 0;
for (let i = 0; i < currentEl.length; i++) {
if (currentEl.options[i].selected) {
is++;
}
if (is > 3) { // if you want more than 3 selected options, change the number here
currentEl.options[i].selected = false;
}
}
})
});
Voila! No Jquery necessary.
var is = 0;
for (var i = 0; i < selectCountryCode.length; i++) {
if (selectCountryCode.options[i].selected) {
is++;
}
if (is > 3) {
selectCountryCode.options[i].selected = false;
}
}
Jilusan
© 2022 - 2024 — McMap. All rights reserved.