IE javascript:单击选项时从选择多个中删除选项节点

时间:2011-10-14 10:09:58

标签: javascript internet-explorer events option

我有一个代码可以在单击选项时从选择多个(<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();(传播确实继续,无论如何)似乎没有做我想要的,因为所有其他事件也被调用。 将事件从单击更改为更改不能解决问题,因为当更改所选选项时,它将被删除,然后所选选项将成为另一个选项,导致再次调用事件,最后,选择中的所有元素都将被删除

1 个答案:

答案 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,以便通过键盘(箭头键+标签)进行选择更改。