2014-04-21 30 views
0

我正在處理窗體,用戶可以添加任意數量的具有多個屬性集的選擇元素,並且無法獲得正確的結果。我減少的測試用例在下面,但我們使用名稱fieldLocation[<id of field in database>][]添加現有選擇(當用戶正在編輯項目時),並在提交時將值放在同一個數組(即數組(1,2))中,但是當我們添加使用fieldLocation[][]的新元素將返回其自己的數組(array(array(1),array(2)))中的每個選擇。有沒有什麼辦法可以動態添加元素而不必生成名稱?在窗體中動態添加多個選擇元素的未知數

例子:

<form method="post"> 
    <select size="4" multiple="multiple" name="fieldLocation[][]"> 
     <option value="1">item1</option> 
     <option value="2">item2</option> 
     <option value="3">item3</option> 
     <option value="4">item4</option> 
    </select> 

    <input type="submit"> 
</form> 

結果:

array(2) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(1) "1" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(1) "2" 
    } 
} 

結果,我們希望:

array(1) { 
    [1]=> 
    array(2) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(1) "2" 
    } 
} 
+0

否 - 沒有指定數組鍵,php無法知道應該將哪些值組合在一起。 – Steve

回答

0

雖然我至少可以部分地錯了這一點,我不相信任何事情超出了第一級數組適用於名稱。所以fieldLocation [] []只能是fieldLocation []。

解決這個問題的一種方法是在表單提交前預處理表單,使用javascript獲取所有選擇的值並使用JSON對其進行編碼以發送到服務器。

因此,像這樣:

$(form_submit_button).on('click',function(event){ 
event.preventDefault(); 
var data = form.serializeArray(); 
data = JSON.stringify(data); 
$(<input/>,{value:data,type:'hidden',name:'fieldLocation'}).appendTo(form); 
form.submit(); 
}); 

的例子是粗糙,但你綁定一個click事件提交按鈕(而不是實際的提交按鈕會更好普通按鈕或鏈接)。然後序列化表單並將其轉換爲字符串。最後,在提交表單之前,用數據創建一個新的隱藏輸入元素。這應該允許您在php中使用json_decode來根據需要提取數據。我不確定serializeArray是否可以與您擁有的名稱結構一起工作,所以如果不這樣做,那麼您需要手動序列化數據。

相關問題