2015-09-27 52 views
3

我在表單(UUID)中有一些動態名稱的輸入變量。 爲了避免錯誤,我測試了是否定義了變量,但奇怪的是函數IsDefined返回了一個錯誤(當字段沒有像收音機或複選框那樣發送時)。測試是否定義了一個動態變量

HTML結果形式:

Yes <input type="radio"id="content_BB66F151-CB09-1C8C-CCF53DE1A92652FC" 
name="content_BB66F151-CB09-1C8C-CCF53DE1A92652FC" value="1"> 
No <input type="radio" id="content_BB66F151-CB09-1C8C-CCF53DE1A92652FC" 
name="content_BB66F151-CB09-1C8C-CCF53DE1A92652FC" value="0"> 

我CFM:

Yes <input type="radio" id="content_#qMD.MD_FIELD_ID#" 
         name="content_#qMD.MD_FIELD_ID#" value="1"> No <input type="radio" id="content_#qMD.MD_FIELD_ID#" name="content_#qMD.MD_FIELD_ID#" value="0"> 

我的CFM測試:我都MD_FIELD_ID的列表和循環在他們

<cfloop list="#attributes.lMetadataField#" index="MD_FIELD_ID" delimiters="," > 
<cfif IsDefined("attributes.content_" & MD_FIELD_ID)> 
</cfif> 

當該領域不在提交的表格中時,Coldfusion將返回給我:

函數IsDefined的參數1,現在是attributes.content_BB66F151-CB09-1C8C-CCF53DE1A92652FC,必須是一個語法上有效的變量名稱。

我已經嘗試了不同的語法:

IsDefined("attributes.content_#MD_FIELD_ID#") or 
attributes["content_#MD_FIELD_ID#"] 

但總是相同的錯誤。如果該字段在提交的表單中,則可以正常工作。

我的代碼有什麼問題?

+0

您是否嘗試將該複選框重命名以用於測試目的?嘗試StructKeyExists(屬性,「content_」和MD_FIELD_ID) –

回答

5

作爲參數提供給isDefined時,您不得使用連字符(以及各種其他字符,如:#)作爲結構鍵名稱(即變量)。相反,你可以這樣做:

<cfif structKeyExists(attributes, "content_" & MD_FIELD_ID)>

structKeyExists不計算表達式,因此不受變量名解析。但是,由於這個事實,您不能像方便地鏈接structKeyExists

例子:

isDefined("someStruct.parentKey.childKey") 

轉化爲

structKeyExists(VARIABLES, "someStruct") 
and structKeyExists(someStruct, "parentKey") 
and structKeyExists(someStruct["parentKey"], "childKey") 

注意如何需要檢查是否存在鏈中的每一個關鍵。但它允許使用任何字符作爲關鍵名稱。

+0

感謝Alexander,strucKeyExist完成這項工作。我從來沒有想過'IsDefined'會對錶達式進行評估,下次我將刪除連字符來替換下劃線以避免這種問題。 – Boodyguard

相關問題