IE javascript:当选项被点击时,从选择多个中移除选项节点
IE javascript: Remove option node from a select multiple when option is clicked
我有一个代码,当选项被单击时,从选择多个(<select multiple></select>
)标记中删除选项元素。代码的工作方式如下:
var option = new Option("sometext","someval");
$(option).click( function(){
selectBox.remove(option);
return false;
}
);
$(selectBox).append(option);
它在我记得的所有引擎(gecko, presto, webkit…)上都能很好地工作,除了IE。
根据我的研究,IE不支持将事件添加到选项标签,所以我将事件添加到选择标签。
$(selectBox).click( function(event){
if (option === selectBox.options[selectBox.selectedIndex]) {
event.preventDefault();
event.stopPropagation();
selectBox.remove(option);
return false;
}
event.preventDefault();
return true;
}
);
式中:if (option === selectBox.options[selectBox.selectedIndex]) {
我已经试过了:if ($(option).is(':selected')) {
也没用。
发生了什么:当我点击一个选项时,所有绑定的函数都被激活,并且可以在元素被删除后激活函数。
使用event.stopPropagation();
(传播确实继续,无论如何)似乎没有做我想做的事情,因为所有其他事件也被调用。将事件从click更改为change并不能解决问题,因为当选定的选项被更改时,它会被删除,然后选定的选项成为另一个选项,导致再次调用事件,最后,选中的所有元素都被删除。
试试下面的代码;假设selectBox
是一个DOM元素、一个JQuery对象或一个指向<select>
元素的CSS选择器:
$(selectBox).click(function(){
var selectedOption = this.selectedIndex;
$("option", selectBox).each(function(index){
if(index == selectedOption){
$(this).remove();
return false; //Stop looping
}
});
})
被选中的选项通过元素的selectedIndex
属性被引用。当循环遍历每个选项时,将在某一点上找到所选的选项。当找到该元素时,删除该选项,并使用return false
终止循环。
不使用.click
,我建议使用.change
,这样通过键盘(方向键+制表键)进行选择更改也可以处理。
相关文章:
- 使用此选项选择父类内部的类
- 更新:仅根据单选按钮和所选选项选择特定项目
- 使用PHP通过HTML表单选项选择器过滤MYSQL结果
- ng-单击在IE中不起作用的选项选择Angularjs
- 从选项选择中删除值
- On为<选项>选择等效项
- 用户界面先前选择的选项选择更改
- 使用ng重复或ng选项和删除空白选项选择长方体角度
- 在HTML5、CSS、JavaScript中添加选项选择器,类似于移动应用程序中的选项设置
- 输入:选中,选项:选择选择器
- 根据使用angularjs从下拉菜单中选择的选项选择适当的复选框
- 如何根据 html 中的选项/选择重定向用户(单击按钮后)
- 使用ng选项选择中的ng选项进行过滤器下拉列表
- 如何设置选项选择的值
- 如何搜索长下拉选项/选择列表
- jQuery - 根据下拉选项选择列出结果
- 从选项选择单击时打开 2 个 URL
- 在 Angular JS 中为 ng 选项选择默认值
- 下拉选项选择的操作
- 通过单击单选按钮清除所有选项选择条目