2013-03-06 131 views
1

我有一個單選按鈕在頁面頂部顯示'沒有選擇供應商',然後查詢循環內的其他幾個單選按鈕。頁面加載高亮單選按鈕

<label> 
    <input type="radio" id="nosupp" name="supp" onchange="resetSupp(this);"> 
    No Supplier Chosen 
</label> 

<cfloop query="supplier" 
    <label> 
    <input type="radio" id="chk1" name="supp" value="#supplier.id#" onchange="change(this);" <cfif getChosen.RecordCount>checked="Yes"</cfif>> 
    Chosen Supplier 
    </label> 
</cfloop> 

因此,我已經提交了包含這些按鈕的表單,並且選中的按鈕存儲在數據庫中。

然後,我使用getChosen.RecordCount查詢數據庫以檢查單選按鈕值是否爲'true'。

我遇到的問題是getChosen.RecordCount選擇了正確的單選按鈕,但沒有顯示我正在使用的紅色突出顯示。

這是怎麼了突出的按鈕:

<script type="text/javascript"> 
    function change(obj) { 
    var tr=obj.parentNode.parentNode; 
    var tbl = tr.parentNode.parentNode; 
    var inputs = tbl.getElementsByTagName("input"); 
    for(var i = 0;i<inputs.length;i++) 
    inputs[i].parentNode.parentNode.style.backgroundColor='transparent'; 
    tr.style.backgroundColor=(obj.checked)? 'red' : 'transparent'; 
} 

function resetSupp(obj) { 
    var tr=obj.parentNode.parentNode; 
    var tbl = tr.parentNode.parentNode; 
    var inputs = tbl.getElementsByTagName("input"); 
    for(var i = 0;i<inputs.length;i++) 
    inputs[i].parentNode.parentNode.style.backgroundColor='transparent'; 
    tr.style.backgroundColor= 'transparent'; 
} 
</script> 

我如何獲得它被設置爲「真」在數據庫中對頁面加載高亮按鈕?

回答

2

你已經寫好了你的函數,但它聽起來好像你永遠不會調用它來初始化頁面加載後的所有內容。

要遵循最佳做法,您需要在body.onload完成時致電change(obj)this question的答案可以通過一些不同的方式來做到這一點。

最簡單/最可靠的(imo)是使用jQuery,但它似乎並未顯示您正在使用它。次好的(同樣,imo)是使用document.onload=function聲明。

除非只有一個輸入需要初始化,否則您可能需要編寫另一個實際循環輸入每個輸入的函數並調用change(obj)。當body.onload發生火災時,您將致電新的init()功能。

那麼,你就必須

document.onload=init 

function init(){ 
    // loop through all your inputs 
    // call change(obj) on each one 
} 

編輯我只是重新讀一遍你changeObj,發現你正在傳遞一個元素和備份DOM樹使用parentNode,所以你已經循環了每個輸入,所以我的僞代碼init會有點偏離原樣。雖然,我可能會使用getElementsByName並傳入輸入組的名稱,因此每次調用change(obj)時都不會重置每個輸入。