Eu preciso armazenar alguma input em um campo oculto, então quando eu imprimir o post-request, recebo:
Array ( [0]=>1 [1]=>2 [2]=>3 )
Eu já tentei:
var elems = []; elems.push['1']; elems.push['2']; elems.push['3']; $('#input_hidden_field').val(elems);
Mas isso não funciona, alguém poderia me ajudar com isso?
Você pode analisar sua matriz em uma string JSON para armazená-la:
.push()
é uma function, portanto, precisa de ()
e não a syntax da matriz []
.
var elems = []; elems.push('1'); elems.push('2'); elems.push('3'); $('#input_hidden_field').val(JSON.stringify(elems)); //store array var value = $('#input_hidden_field').val(); //retrieve array value = JSON.parse(value);
Para criar um object basta alterar a definição de elems
e o armazenamento dos valores:
var elems = {}; elems[0] = '1'; elems[1] = '2'; elems[2] = '3';
Demonstração
Referência
.stringify ()
.parse ()
Uma abordagem melhor seria append um novo formdata para cada valor dentro de um array.
JS
var elems = []; elems.push['1']; elems.push['2']; elems.push['3']; var fd = new FormData(document.getElementById("myform")); for (var i = 0; i < elems.length; i++) { fd.append('elems[]', elems[i]); }
HTML
PHP
JS
var elems = []; elems.push['1']; elems.push['2']; elems.push['3']; $('#input_hidden_field').val(JSON.stringify(elems));
PHP
$elems = json_decode($_POST['hidden_input_name'], true);