Domino Server version: 8.5.3 FP6
在Web表單中有些Combo box, Checkbox, Radio button,若將其disable,於存檔後,欄位值將被清空,原先在8.5.2時並無此問題!
一般的建議為以隱藏條件取代使用HTML的Disabled屬性,但公司有使用集中安控控管,無法一一修改所有表單欄位,因此開始查看發生原因為何。
最後同事幫忙找到了解決方法,原來是8.5.3在FP2後才提供,但必須在Notes.ini中加一DominoDisableKeywordReset參數,連結如下:
http://www-10.lotus.com/ldd/nd85forum.nsf/DateAllFlatWeb/c5ceb75f77158a4a85257ab000741dc0?OpenDocument
若disabled則顏色反灰,無法編輯,但也導致submit後欄位值將被清空 |
在設定Notes.ini後,結論如下,
DominoDisableKeywordReset=3
1. 若為新表單,如果此欄位無預設值,手動選擇後再disabled存檔,則欄位值仍會被清空。
2. 若為新表單,如果此欄位有預設值,手動選擇後再disabled存檔,則欄位值為預設值,手動選擇值無效。
3. 若為已存檔之文件,開啟後若disabled再存檔,並不會清空欄位值,也不會變更欄位值。
因此若有新文件不希望讓user自行選擇,但又不能固定給預設值的,除了以上的Notes.ini設定外,我提供一個方法和大家分享,測試程式如下:
在onLoad,Combo欄位給了值後,把其他不需要的值disabled
document.forms[0].fdcombo.options[2].selected = true;
for(j=0; j<document.forms[0].fdcombo.length;j++) {
if (document.forms[0].fdcombo.options[j].selected==false){
document.forms[0].fdcombo.options[j].disabled=true
}
}
checkbox, radio button欄位,radio同combo,未選擇的就disabled。checkbox和另外二者不同的是,再點取自身使可修改為空值,所以不適用上面的方法,但可以將onclick事件改為return false, 在按下時就不會有任何變動。
radio當然也可以改為return false, 但若有不同的event觸發也都要一併更改, 比較麻煩。
document.forms[0].fldCheckBox[2].checked = true;
document.forms[0].fldRadio[1].checked = true;
var Ele = document.getElementsByTagName("input");
for(i=0; i<Ele.length;i++) {
if (Ele[i].type=='checkbox') {
var x=Ele[i];x.onclick=function x() {return false;}
}else if (Ele[i].type=='radio' && Ele[i].checked==false) {
Ele[i].disabled=true;
}
}
這種作法和原來直接將欄位disabled的差別,除了不會有欄位值被清空的疑慮,且只將未選擇的欄位反灰,已選或設定值仍為黑色,反差效果更為明顯。
而Checkbox則仍為黑色只是再去勾選是無效的,能有效避開現有值被修改。