我有一个代码可以在单击选项时从选择多个(<select multiple></select>
)标记中删除选项元素。
代码工作+ - 像这样。
var option = new Option("sometext","someval");
$(option).click( function(){
selectBox.remove(option);
return false;
}
);
$(selectBox).append(option);
除了IE之外,它在我能记住的所有引擎(gecko,presto,webkit ......)上都能很好地工作。
根据我的研究,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();
(传播确实继续,无论如何)似乎没有做我想要的,因为所有其他事件也被调用。
将事件从单击更改为更改不能解决问题,因为当更改所选选项时,它将被删除,然后所选选项将成为另一个选项,导致再次调用事件,最后,选择中的所有元素都将被删除
答案 0 :(得分:1)
试试这段代码;假设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
,以便通过键盘(箭头键+标签)进行选择更改。