2010-04-08 42 views
4

我在複雜的訂單表單上有一個選擇框(對於客戶字段),當用戶開始向訂單添加行時,他們不應該被允許更改客戶選擇框(除非所有行都被刪除)。鎖定HTML選擇元素,允許在提交時發送值

我的直接想法是,我可以使用禁用的屬性,但是當禁用該框時,選定的值不再傳遞給目標。

前一個問題出現時,其他開發人員之一通過循環遍歷所有選項並禁用除選定的選項以外的所有選項來解決此問題,並且確實已將該值傳遞給目標,我們一直在使用。但是現在我正在尋找一個合適的解決方案,我不想循環所有選項,因爲數據正在擴展,並且開始引入性能問題。

我不希望在按下提交按鈕時啓用此/所有元素。

如何鎖定輸入,同時保持選定的選項並將該值傳遞給目標腳本?如果可能的話,我寧願使用非JavaScript解決方案,但如果需要,我們運行jQuery 1.4.2以便可以使用。

編輯

我試圖使用只讀屬性,但收效甚微,這裏是我使用的jQuery代碼:

$('.abc').each(function(element) { 
    $(this).attr('readonly','readonly'); 
}); 

當檢查與Firebug的元素只讀屬性有已設置,但我仍然可以更改選擇框中的值?!

回答

5

這工作:

$('.abc :not(:selected)').attr('disabled','disabled'); 

jQuery將仍然可以通過幕後的元素循環,但我嚴重懷疑你會遇到性能問題,除非你的select有成千上萬的元素(在這種情況下,您的可用性問題將遠遠不會衡量性能問題)。原始代碼一定是做錯了。

+0

成千上萬的選擇不遠處;-),可用性不是問題,因爲每個項目都有一個唯一的代碼,用戶將知道,選擇框和翻轉(在大量的用戶測試後)似乎爲我們工作。 – 2010-04-08 13:50:15

+0

爲了公平起見,我猜jQuery UI自動完成可能是一個更好的選擇,我認爲這使用了一個文本框,因此可以只讀/禁用:) – 2010-04-08 13:51:40

+0

您的解決方案(儘管與我的原創相同)似乎仍然是最佳選擇。我不喜歡在這個階段使用隱藏字段。如果給出更好的解決方案,我的決定可能會改變:-) – 2010-04-08 13:54:25

2

隱藏字段添加到您的形式的onsubmit從選擇取值,並將其放置在隱藏字段的值

按照HTML規範,readonly不被select標籤

+0

謝謝您的回答,這已經越過我的腦海裏,我一定要研究這個,如果它是去上班的嘛。 – 2010-04-08 13:25:46

+0

我在另一個答案中看到了您的評論,我認爲它也不存在。我不明白爲什麼沒有兩者兼而有之? – 2010-04-08 13:40:04

+0

只有'INPUT type = text,INPUT type = password'和'TEXTAREA'似乎支持該屬性,所以我猜測它只適用於文本輸入。雖然似乎是一個疏忽。 – CResults 2010-04-08 13:45:58

1

「支持選擇「不具有隻讀屬性。它只有禁用屬性。

http://www.w3schools.com/TAGS/att_select_disabled.asp

所以你最好的最好的是:

$('.abc').each(function(element) { 
    $(this).attr('disabled','disabled'); 
}); 

HTH

+0

乾杯,就像我對@CResults說的,有點奇怪,這不存在。無論如何,謝謝:) – 2010-04-08 13:40:42

2

這工作得很好

<select disabled="true"> 
<option value="1">one</option> 
<option value="2">two</option> 
<option value="3">thre</option> 
</select>