2014-01-10 64 views
2

我正在嘗試提交一個包含星期幾複選框的html表單。當他們被檢查時,我爲該複選框傳遞值1。要處理未經檢查的框,我在表單操作頁面的CFPARAM標記中傳遞值0。ColdFusion中的HTML表單錯誤:「元素__在FORM中未定義」。

我將這些表單輸入添加到我傳遞給web服務的結構中。


表單代碼(opentroubleticket.cfm):

<form action = "opentroubleticketaction.cfm" method="post" id="myForm" name="myForm"> 
    <cfoutput><input type="checkbox" name="Loc_Mon" value="1"> MON </cfoutput> 
    <cfoutput><input type="checkbox" name="Loc_Tue" value="1"> TUE</cfoutput> 
    <cfoutput><input type="checkbox" name="Loc_Wed" value="1"> WED </cfoutput> 
    <cfoutput><input type="checkbox" name="Loc_Thu" value="1"> THU </cfoutput> 
    <cfoutput><input type="checkbox" name="Loc_Fri" value="1" > FRI</cfoutput> 
    <cfoutput><input type="checkbox" name="Loc_Sat" value="1" > SAT</cfoutput> 
    <cfoutput><input type="checkbox" name="Loc_Sun" value="1" > SUN</cfoutput> 
    <input type="submit" name="submit" value="SUBMIT" class="beef"> 
</form> 


行動代碼(opentroubleticketaction.cfm):

<cfparam name="Loc_Mon" default="0"> 
<cfparam name="Loc_Tues" default="0"> 
<cfparam name="Loc_Wed" default="0"> 
<cfparam name="Loc_Thu" default="0"> 
<cfparam name="Loc_Fri" default="0"> 
<cfparam name="Loc_Sat" default="0"> 
<cfparam name="Loc_Sun" default="0"> 

<!---some other stuff---> 

<cfscript> 
    BodyRT = structNew(); 
    BodyRT.RepairRequest = structNew(); 
    BodyRT.RepairRequest['Loc_Mon']=form.Loc_Mon; 
    BodyRT.RepairRequest['Loc_Tue']=form.Loc_Tue; 
    BodyRT.RepairRequest['Loc_Wed']=form.Loc_Wed; 
    BodyRT.RepairRequest['Loc_Thu']=form.Loc_Thu; 
    BodyRT.RepairRequest['Loc_Fri']=form.Loc_Fri; 
    BodyRT.RepairRequest['Loc_Sat']=form.Loc_Sat; 
    BodyRT.RepairRequest['Loc_Sun']=form.Loc_Sun; 
</cfscript> 

<!---some other stuff---> 

當我提交的形式與所有檢查框,它通過併爲每個輸入正確傳遞值爲1的Web服務。當我提交帶有未選中框的表單時,出現此錯誤:
Element LOC_MON is undefined in FORM
爲什麼元素未定義,即使我使用CFPARAM標記設置了默認值?

如果我檢查MON盒子,它說Element LOC_TUE is undefined in FORM,依此類推。

+0

如果它只發生在週二,我會說這是因爲輸入元素的名稱與cfparam不匹配。 –

+1

你應該在你的''標籤中確定你的表單變量的範圍(實際上,只是總是:總是對你的變量進行範圍)。如果 - 爲了參數的緣故 - 如果你已經有一個變量'variables.Loc_Mon',那麼你的無範圍''不會幫助你默認'form.Loc_Mon'。 –

+0

感謝@AdamCameron,這是一個很好的觀點......它沒有解決問題,但我已經添加了最佳實踐。 –

回答

2

您所看到的是HTML表單中複選框的默認行爲。這些值只有在框(es)被選中時纔會通過。如果未選中,則表單字段不會被傳遞。

Reference

正如在評論中提到,你<cfparam>標籤不要再追這個情況的原因是因爲你還沒有作用域他們。這應該可以解決你的問題。

我在註釋中也注意到你說的範圍並沒有解決問題。這是因爲你的代碼中還有一個錯字(或者至少有一個錯誤匹配)。在星期二變量的<cfparam>標記中,您將名稱設置爲Loc_Tues(注意結尾處的's')。後來在你的代碼中,你指的是Loc_Tue(沒有's')。因此,在您的<cfparam>標籤中添加form.示波器,並修復該錯誤匹配,然後您應該順利完成。

<cfparam name="form.Loc_Mon" default="0"> 
<cfparam name="form.Loc_Tue" default="0"> 
<cfparam name="form.Loc_Wed" default="0"> 
<cfparam name="form.Loc_Thu" default="0"> 
<cfparam name="form.Loc_Fri" default="0"> 
<cfparam name="form.Loc_Sat" default="0"> 
<cfparam name="form.Loc_Sun" default="0"> 
+0

謝謝@Miguel!在我的'cfparam'標籤中添加'form.'作用域的確有竅門。 –