2010-04-05 167 views
2

目前,我有以下的js代碼取消在多所有選項1個選項選擇

function clearMulti(option) 
{ 
    var i; 
    var select = document.getElementById(option.parentNode.id); 
    for(i=1;i<select.options.length;i++) 
     { 
     select.options[i].selected=false; 
    } 
} 

function clearAllOpt(select) 
{ 
    select.options[0].selected = false; 
} 

一是取消對多個選擇調用時和第二清除所有選項每當選擇其他選項時的第一個選項。

對此的需要是,第一個選項是全部。

這一切都工作正常和花花公子FF,但在IE8什麼也沒有發生......任何建議如何讓這兩個工作?

這是從jsp頁面調用的...下面的代碼 - 編輯是如何填充id和東西,因爲它是數據庫信息和其他我可能不應該給的東西:)但是這應​​該會給你您正在尋找的信息。

<select id="blahSelect" name="blahSelect" style="width:80%" size=7 multiple> 
    <option id="All Blah" onclick="clearMulti(this)">All Blah</option> 
    <option id="**from sql**" onclick="clearAllOpt(this.parentNode)">**from sql**</option> 
</select> 

在此先感謝。

+0

我們能看到你的HTML或任何你在捕捉,做這個事件? – Jage 2010-04-05 20:56:57

+0

根據請求進行編輯。 – Shaded 2010-04-05 21:44:43

回答

1

而是一個獨立的onclick =的 「」 每個選項,嘗試一個onchange = 「」 上的選擇:

document.getElementById("bar").onchange=function(){ 
    if(this.options.selectedIndex > 0){ 
     /* deselect this.options[0] */ 
    }else{ 
     /* deselect this.options[1-n] */ 
    } 
} 

,並在HTML:

<select id="bar"> 
    <option>ALL</option> 
    <option>option 1</option> 
    <option>option 2</option> 
    ... 
    <option>option n</option> 
</select> 
+0

這似乎是一個堅實的方法,並在IE8上工作,但是,無論如何,我可以取消選擇所有選項,如果用戶按住ctrl並選擇一個選項(除全部之外),而所有也被選中?目前它只會忽略所選的第二個選項並保持全部選中狀態。謝謝! – Shaded 2010-04-06 12:54:46

+0

我不知道。有一件事要嘗試:不要使用selectedIndex,而是嘗試循環選擇數組,並查看哪些被選中,然後根據這些選項進行操作。 – greim 2010-04-06 14:29:53

0

沒有與此代碼

1)的document.getElementById(option.parentNode.id)的幾個問題;

爲什麼當你已經有元素時,通過id獲取元素?你應該做 var select = option.parentNode

2.)我不會給變量select命名 - 命名它更合適。它沒有預留,但是因爲它在很多對象中使用而被半保留。所以 - VAR mySelectBoy = option.parentNode

+0

感謝您的支持,所做的更改......仍然是同樣的問題。 – Shaded 2010-04-05 21:37:23

+0

我在IE7中看到了這一點,它似乎工作正常,但不是8。也許在你的代碼中的其他地方有其他事情。也許你的代碼中還有別的東西在發生。某處出現JS錯誤。 – Tim 2010-04-05 22:12:26

3

IE8不會觸發選項元素上的onclick事件。

另請注意,selectedIndex返回第一個選定選項,並且不會根據上次選擇的選項進行更改。這將導致ALL檢查時出現問題,並嘗試按住CTRL鍵檢查其他選項。

你可以嘗試這樣的事:

<script type="text/javascript"> 
function excludeFirstOption(select) { 

    if (select.selectedIndex === 0) { 
     for (var i=0; i<select.options.length; i++) { 
      select.options[i].selected = false; 
     } 
    } 
} 
</script> 

<select size="7" multiple="multiple" onchange="excludeFirstOption(this)"> 
    <option>All</option> 
    <option>Item 1</option> 
    <option>Item 2</option> 
    <option>Item 3</option> 
    <option>Item 4</option> 
</select> 
+0

好點,有一個upvote。 – greim 2010-04-06 14:31:24

0

只是這樣做:

$('#mySelectList').val(''); 
+1

這是JQuery,OP沒有提到使用jQuery ... – Rafael 2012-10-29 22:36:15

相關問題