2011-10-14 82 views
2

當我有一個代碼,其去除從選擇多個(<select multiple></select>)被點擊選項時標籤的選項元素。代碼工作+ - 像這樣。IE的javascript:從選擇多個刪除選項節點選項被單擊

var option = new Option("sometext","someval"); 
$(option).click(function(){ 
       selectBox.remove(option); 
       return false; 
      } 
     ); 
$(selectBox).append(option); 

它非常好上除了IE以外的引擎我還記得(壁虎,很快,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

試試這個代碼;假設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,以便通過鍵盤(箭頭鍵+選項卡)的選擇更改也處理。

+0

挑了這個1做了一些修改,並開始工作。謝謝 – brunoais

相關問題