2013-07-17 50 views
0

我正在使用數組來存儲請求的信息。在請求中的某一點,他們可以添加或刪除信息。ArrayDeleteAt - ColdFusion

刪除按鈕將索引傳遞到找到ArrayDeleteAt()的邏輯的頁面。

在它下面的代碼頁:

<cfif (isDefined('form.deleteIndex'))> 
<cfset temp = arrayDeleteAt(session.Request,form.deleteIndex)> 
</cfif> 

如果刪除了第一個項目,它不會刪除結構出數組,但清除值了。刪除其他任何項目時都可以,但是我無法從陣列中刪除空白。

創建陣列:

<CFSET VarArrayLen = ArrayLen(session.ord)> 
<CFSET VARDuplicatedItem = "False"> 
<cfloop index="i" from="1" to="#VarArrayLen#"> 
    <CFIF session.ord[i].ITEMID eq ITEMID > 
     <CFSET VARDuplicatedItem = "TRUE"> 
    </CFIF> 
</CFLOOP> 
<CFIF VARDUPLICATEItem eq "False"> 
    <cfset temp = arrayAppend(session.ord,StructNew())> 
    <cfset session.ord[arraylen(session.ord)].ITEMID = ITEMID> 
    <cfset session.ord[arraylen(session.ord)].ITEMDETAILS = ITEMDETAILS> 
    <cfset session.ord[arraylen(session.ord)].FullRequestDetails = FullRequestDetails> 
</CFIF> 

一個頁面,允許用戶從陣列添加或刪除:

<CFSET VarArrayLen = ArrayLen(session.ord)> 
<table> 
    <cfloop index="i" from="1" to="#VarArrayLen#"> 
     <CFIF ArrayIsDefined(session.ord,i) eq true> 
      <tr> 
       <cfform action="ActionPage.cfm" method="post"> 
        <td> 
         <input type="hidden" value="#i#" name="del" /> 
         <input type="image" src="/images/stop.gif" width="8" alt="delete this item" /> 
        </td> 
       </cfform> 
      </tr> 
     </CFIF> 
    </CFLOOP> 
</table> 

在頁面,它會刪除的項目:

<cfif (isDefined('form.del'))> 
    <cfset temp = arrayDeleteAt(session.ord,form.del)> 
</cfif> 

那是所有的代碼。

在會話中它仍然顯示數組中的一個項目,其中所有的值都是空的。

它始終是第一個要刪除的項目,它們保留在數組中,其餘的都被刪除。

+2

有趣,但它會更有用的,如果你能證明在測試情況下,看似怪異的行爲。 – Henry

+3

是的,請發佈我們可以測試的[small,* self-contained *,repro case](http://www.sscce.org/)。 – Leigh

+0

我已更新頁面上的代碼以顯示下面的腳本。 – user1186309

回答

0

我試圖將您的問題提取到自包含的測試用例中,但我無法使用CF10重現您的問題。

<cfset session.orders = [{item='blah',qty=1},{item='blah2',qty=2}]> 

<cfdump var="#session.orders#" format="text" 
     label="before arrayDeleteAt(session.orders, 1)"> 

<cfset arrayDeleteAt(session.orders,1)> 

<cfdump var="#session.orders#" format="text" 
     label="after arrayDeleteAt(session.orders, 1)"> 

輸出:

before arrayDeleteAt(session.orders, 1) - array - Top 2 of 2 rows 

1) [struct] 
    ITEM: blah 
    QTY: 1 
2) [struct] 
    ITEM: blah2 
    QTY: 2 
after arrayDeleteAt(session.orders, 1) - array - Top 1 of 1 rows 

1) [struct] 
    ITEM: blah2 
    QTY: 2 
+0

感謝您的評論。我已經解決了這個問題。我的添加和刪除功能是在同一個CFM頁面中,但我雖然用CFIF語句劃分了兩個,但我沒有。當它刪除它運行添加,因爲值不在那裏它將空字符串插入到數組中。 – user1186309

+3

既然如此,我建議你撤回你的問題。 –

+1

絕對是這樣,是的。 –