2010-06-12 51 views
1

我無法找到如何設置html下拉框?Javascript,html:如何判斷選項框是否已設置?

好的,我明白我是如何檢查索引一旦被激活並選擇一個項目。但是,我如何確定該盒子沒有被觸摸,並且沒有選擇任何項目?

謝謝。

+0

你一定是指「下拉」框嗎?一個項目將始終選擇一個下拉選擇元素。默認選擇的項目將成爲第一個選項,除非另一個具有'selected'屬性。 – 2010-06-12 15:05:03

回答

0

在這種情況下,select.options.selectedIndex將爲-1。

+1

在下拉選擇框中,將始終選擇一個項目。如果未設置默認值,則所選索引將爲0.在具有大小或多個屬性的選擇框中,如果未選擇任何項目,則索引將爲-1,但OP會專門提到下拉菜單。 – 2010-06-12 15:02:16

+0

@Andy E的頭:我理解他的意思是「沒有選擇的項目」......這是可能的,但你是對的,而不是如果盒子「沒有被觸摸」。自相矛盾的說法。在任何情況下,如果沒有選擇項目,索引將爲-1。它可以設置爲-1來選擇任何東西。 – Robusto 2010-06-12 15:05:00

+1

it * can *可以設置爲-1,但默認情況下它不會設置爲-1。我爲你打了一個很快的例子 - http://jsfiddle.net/fYju6/。這個頁面加載並提醒selectedIndex,它是0. ** edit ** nm,當它實際上是一個協議時,我誤解了你最後的評論作爲參數;-) – 2010-06-12 15:07:52

0
I don't think there's a native method, but you can add an event listener to call a function when the select is changed: 

function addEvent(elm, evType, fn, useCapture) { 
    if (elm.addEventListener) { 
     elm.addEventListener(evType, fn, useCapture); 
     return true; 
    } 
    else if (elm.attachEvent) { 
     var r = elm.attachEvent('on' + evType, fn); 
     return r; 
    } 
    else { 
     elm['on' + evType] = fn; 
    } 
} 
hasBeenTouched = false; 
addEvent(selectEl, 'change', function() { 
    hasBeenTouched = true; 
}); 
+0

使用焦點或模糊事件會更明智一些,因爲如果您選擇列表中當前選定的選項,則更改事件不會觸發。 – 2010-06-12 15:12:38

0

文檔被加載(天真的window.onload)後,手動設置下拉列表的selectedIndex爲-1(如其他人觀察到的,缺省值是爲否則將被選擇的第一項)

window.onload = function() { 
    document.getElementById('ddlId').selectedIndex = -1; 
}; 

用戶無法通過瀏覽器界面將下拉列表設置爲未選中狀態,因此您可以通過測試selectedIndex在最初之後的任意點是否仍然爲-1來確保它未被設置和「未被觸摸」自己設置。

0

這聽起來像你想確保用戶選擇了一個選項,而不是僅僅使用默認選項提交表單。這種情況通常通過在下拉框中有一個「標籤」選項(有時是空白以保持尺寸不變)來實現,該選項默認選中,然後通過驗證檢查以查看是否選擇了另一個選項:

<select> 
    <option>-- Please choose an option -- </option> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
</select> 

正確使用驗證(服務器端和客戶端),您可以實現不依賴於Javascript的解決方案來檢查是否正確選擇了選項。

相關問題