Jal*_*tel 5 html javascript jquery multi-select
我需要从多个选择中仅选择3个选项.如果用户选择的选项多于上一个选定元素,则应替换为单击的新选项.
我有一个例子如下:
<select multiple id='testbox'>
<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>
Run Code Online (Sandbox Code Playgroud)
用户选择时
First option
Second option
Third option
Run Code Online (Sandbox Code Playgroud)
现在他达到最大选择限制3.如果他点击另一个选项,如第十个选项,我需要删除第三个选项并获得选择第十个选项
为此,我尝试了这个但不知道如何实现我的目标
<script type="text/javascript">
google.load("jquery", "1");
$(document).ready(function() {
//alert("1111");
var last_valid_selection = null;
$('#testbox').change(function(event) {
if ($(this).val().length > 2) {
alert('You can only choose 2!');
$(this).val(last_valid_selection);
} else {
last_valid_selection = $(this).val();
latest_value = $("option:selected:last",this).val()
alert(latest_value);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
请提出一些想法或解决方案.
这很好用:
var lastSelected;
$("#testbox").change(function() {
var countSelected = $(this).find("option:selected").length;
if (countSelected > 3) {
$(this).find("option[value='" + lastSelected + "']").removeAttr("selected");
}
});
$("#testbox option").click(function() {
lastSelected = this.value;
});
Run Code Online (Sandbox Code Playgroud)
我必须设置一个全局变量lastSelected以及一个选项单击事件来捕获实际的最后一个选项(this.value在更改事件中给出了我选择的最高选项,而不是实际的最后一个选项).
演示:http://jsfiddle.net/JAysB/1/
好吧,我不喜欢jQuery,所以我开发了相同的(小提琴),但是纯粹的,易于阅读的JavaScript:
document.getElementById('testbox').selopt=new Array();
document.getElementById('testbox').onchange=function(){
for(i=0; i<this.childNodes.length; i++)
if(this.childNodes[i].tagName!='OPTION')
continue;
else{
if(this.childNodes[i].selected &&
this.selopt.indexOf(this.childNodes[i])<0)
this.selopt.push(this.childNodes[i]);
}
if(this.selopt.length==4)
this.selopt.splice(2,1)[0].selected=false;
}
Run Code Online (Sandbox Code Playgroud)
PS没有全局变量!:P
var lastOpt;
$('#testbox option').click(function () {
lastOpt = $(this).index();
});
$('#testbox').change(function () {
if ($('option:selected', this).length > 3) {
$(' option:eq(' + lastOpt + ')', this).removeAttr('selected');
}
});
Run Code Online (Sandbox Code Playgroud)