[英]How can I set my data as JSON in a hidden input field
我有一個輸入字段,如下所示
<input type="hidden" value="" id="inputField">
現在我有產品清單,每個產品都有一個復選框。 當用戶點擊復選框時,我會獲得產品ID和名稱。 現在我想再次將它保存在隱藏字段中,如下所示
<input type="hidden"
value="[{"product_id":123,"name":"stack"},{"product_id":456,"name":"overflow"}]"
id="inputField"
>
我的第一個問題是如何做到這一點以及如何創建JSON?
其次,如果用戶再次取消選中產品復選框,則需要獲取當前隱藏值並將其轉換為某種數據結構,從數據結構中刪除未選中的框ID,然后將其再次保存在隱藏字段中。
有沒有在JavaScript中完成這項工作的庫?
使用jQuery:
HTML:
<input type="hidden" value='[{"product_id":123,"name":"stack"},{"product_id":456,"name":"overflow"}]'
id="inputField">
JS:
var data = {}
data.products = jQuery.parseJSON($('#inputField').val())
alert(data.products[0].product_id)
您要查找的構建塊是JSON.stringify
和JSON.parse
;
var stringData = '[{"product_id":123,"name":"stack"}, {"product_id":456,"name":"overflow"}]';
// Convert a string to an JavaScript object
var arrayData = JSON.parse(stringData);
// Convert a JavaScript object to a string
stringData = JSON.stringify(arrayData);
現在,只要其中一個復選框改變狀態,您就可以從隱藏字段中獲取對象並進行修改。 修改對象后,您將字符串保存回隱藏字段。
要從/向隱藏字段讀取和存儲值:
var field = document.getElementById('inputField');
// Reading the value
stringData = field.getAttribute('value');
// Storing the value
field.setAttribute('value', stringData);
您仍然缺少數組的修改,您可以這樣做:
// Adding a newly checked product
arrayData.push({
product_id: …,
name: …
});
// Removing a product from the list is more complicated
arrayData = arrayData.filter(function(product){
var productIdToRemove = …;
return product.product_id!==productIdToRemove;
});
關於庫:可能大多數都包含代碼以便於數組操作和表單數據的設置。 有關示例,請參閱jQuery或原型的文檔或其他答案。
只是一個想法:放棄使用隱藏字段並將復選框轉移到服務器的整個想法不是更簡單。 如果選中該復選框,請使用它,否則忽略相關的產品數據。
在JavaScript中,只需指定值:
var json = JSON.stringify([{"product_id":123,"name":"stack"}]);
document.getElementById('inputField').setAttribute('value', json);
在服務器端語言中,用HTML編碼JSON,例如使用php的htmlspecialchars
或python的html.escape
。 結果將如下所示:
<input type="hidden" id="inputField"
value="[{"product_id":123,"name":"stack"}]">
正如下面的其他答案中所述,要將JSON轉換為字符串,請使用JSON.stringify()函數,如下所示:
var json = JSON.stringify([{"product_id":123,"name":"stack"}]);
document.getElementById('inputField').setAttribute('value', json);
並且您在var json
獲得JSON對象的字符串表示形式。 要以其他方式執行此操作以便您可以更新該字符串中包含的實際JSON對象,您可以使用eval:
var json_object = eval("("+json+")");
現在,重新創建原始JSON對象,您可以更新它,並將其重新格式化回隱藏字段或其他一些變量...
我建議使用encodeURIComponent
函數。 與JSON.stringify
一起,我們應該具有以下內容:
var data= "{"name":"John"}";
var encodeddata encodeURIComponent(JSON.stringify(var data= "{"name":"John"}";
))
現在該值可以安全地存儲在輸入隱藏類型中,如下所示:
<input type="hidden" value="'+encodeddata+'">
現在要讀取數據,我們可以做類似的事情:
var data = JSON.parse(decodeURIComponent(value))
我仍然對你的問題感到困惑,但是如果你只是在輸入復選框中存儲名稱和id,那么你可以使用jQuery完成這個。
var jsonArray = [];
$("input:checkbox:checked").each(function(){
var jsonObj = {};
jsonObj.product_id = $(this).attr("id");
jsonObj.name = $(this).attr("name");
jsonArray.push(jsonObj);
});
變量jsonArray
現在將保存一個類似於您發布的示例的json字符串。 您可以使用JSON.stringify(jsonArray)
來查看此內容。
無需創建隱藏字段,將此字符串作為值並嘗試在復選框狀態更改時添加和刪除該字符串。 當頁面准備好通過按鈕點擊等進行更改時,只需執行javascript即可。
祝你好運。
如果您有JSON對象,請使用JSON.stringify
將其保存到隱藏字段:
var myObj = [{"product_id":123,"name":"stack"},{"product_id":456,"name":"overflow"}];
document.getElementById('inputField').value = JSON.stringify(myObj);
添加庫
“<%@ taglib uri =”http://java.sun.com/jsp/jstl/functions“prefix =”fn“%>”
使用:$ {fn:escapeXml(string1)}
input type =“hidden”value =“$ {fn:escapeXml(string1)}”id =“inputField”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.