Ответ 1
Вы можете использовать jQuery
$("select").change(function () {
if($("select option:selected").length > 3) {
//your code here
}
});
Можно ли установить предел для мультиплекса?
Ниже приведен пример кода, в котором пользователь может выбрать более 1 значения.
<select multiple="multiple" name="choose">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
<option value="4">Value 4</option>
<option value="5">Value 5</option>
<option value="6">Value 6</option>
</select>
Но как ограничить пользователя выбором не более 3 значений. Любая идея?
Вы можете использовать jQuery
$("select").change(function () {
if($("select option:selected").length > 3) {
//your code here
}
});
Вы сделали бы это с помощью javascript на стороне клиента, а затем добавите проверку на стороне сервера, а также, если клиент отключил javascript.
Вот базовый код на стороне клиента, который дает вам представление:
<html>
<body>
<form onsubmit="validate()">
<select multiple="multiple" id="choose" name="choose">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
<option value="4">Value 4</option>
<option value="5">Value 5</option>
<option value="6">Value 6</option>
</select><br>
<input type="submit">
</form>
<script>
function validate()
{
var selectChoose = document.getElementById('choose');
var maxOptions = 2;
var optionCount = 0;
for (var i = 0; i < selectChoose.length; i++) {
if (selectChoose[i].selected) {
optionCount++;
if (optionCount > maxOptions) {
alert("validation failed, not submitting")
return false;
}
}
}
return true;
}
</script>
</body>
</html>
Script, который будет запрещать выбор из более чем 3 элементов (в отличие от просто проверки его в момент отправки).
var verified = [];
document.querySelector('select').onchange = function(e) {
if (this.querySelectorAll('option:checked').length <= 3) {
verified = Array.apply(null, this.querySelectorAll('option:checked'));
} else {
Array.apply(null, this.querySelectorAll('option')).forEach(function(e) {
e.selected = verified.indexOf(e) > -1;
});
}
}
Обратите внимание на некоторую дополнительную сложность, связанную с предотвращением фактического выбора элемента в select
и что он скорее проверяет действия пользователя и возвращает его, если он недействителен.
RedFilter имеет правильную идею с проверкой javascript. Не тестировали, но вы могли бы сделать что-то вроде:
var options = document.all.tags("option");<br>
var selectedCounter = 0;
for (var i=0; i < options.length; i++) {
if (options[i].selected) {
selectedCounter++;
}
checkCounter();
}
function checkCounter() {
//disable all options
}