Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, preciso de uma ajuda com um código.
O script abaixo adiciona grupos de campos em um formulário. Até aí ok. Os campos são adicionados porém quando envio o formulário só recebo os dados dos inputs fixos, os que são adicionados dinamicamente não são recebidos.
Este é o código:
$(document).ready(function() {
var max_fields = 100; //maximum input boxes allowed
var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID
var token = $('#token').val();
var x = 1; //initlal text box count
$(add_button).on({click: function(e){ //on add input button click
e.preventDefault();
var length = wrapper.find("input:text").length;
if (x < max_fields) { //max input box allowed
x++; //text box increment
$(wrapper).append('<div class="box-footer"><a href="#" class="remove_field btn btn-danger pull-right"><i class="fa fa-close"></i></a><div class="col-md-12"><h2>Novo Evento</h2></div><div class="form-group col-md-6"><label for="nome_evento">Evento</label><input type="text" class="form-control" id="nome_evento" name="evento[]" placeholder="Nome do Evento" required /></div><div class="form-group col-md-3"><label for="carencia">Carência</label><input type="text" class="form-control" id="carencia" name="carencia[]" placeholder="Dias de Carência" required /></div><div class="form-group col-md-3"><label for="reducao_carencia">Redução de Carência</label><input type="text" class="form-control" id="reducao_carencia" name="reducao_carencia[]" placeholder="Dias de Redução" /></div><div class="clearfix"></div><div class="form-group col-md-12"><label for="descricao">Mais Informações</label><textarea class="textarea" name="descricao[]" placeholder="Descreva as informações aqui!" style="width: 100%; height: 200px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;" required></textarea></div></div>'); //add input box
}
wrapper.find("input:hidden").each(function() {
$(this).val()
});
$(function (){
$('.select2').select2()
});
}});
$(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
e.preventDefault();
$(this).parent('div').remove();
x--;
})
});Coloquei lá. Esta funcionando assim como no meu, só esta sem o layout.
Ele adiciona os campos normalmente, só não envia via post.
Vamos lá, fiz um teste e os campos são enviados, o problema pode ser em como você está capturando eles no seu php.
Meu teste com 3 eventos:
nome=Nome &mais_informacoes=Mais Informações text area&evento[]=nome do evento1&carencia[]=carencia1&reducao_carencia[]=reducaocarencia1&descricao[]=mais infos evento1&evento[]=evento 2&carencia[]=carencia2&reducao_carencia[]=redu2&descricao[]=amsiinfo2&evento[]=evento3&carencia[]=carencia3&reducao_carencia[]=reducarencia3&descricao[]=mais info 3
Assim:
<?php
if(isset($_POST['evento'])) {
extract($_POST);
foreach(array($evento) as $info1)
foreach(array($carencia) as $info2)
foreach(array($reducao_carencia) as $info3)
foreach(array($descricao) as $info4)
for($i = 0; $i < count($info1); $i++) {
echo $info1[$i]." e ".$info2[$i]." e ".$info3[$i]." e ".$info4[$i]."<br>";
}
}
?>if(isset($_POST['evento'])) {
$evento = $_POST['evento'];
$carencia = $_POST['carencia'];
$reducao_carencia = $_POST['reducao_carencia'];
$descricao = $_POST['descricao'];
foreach( $evento as $key => $n ) {
echo $evento[$key]." e ".$carencia[$key]." e ".$reducao_carencia[$key]." e ".$descricao[$key]."<br>";
}
}
tenta algo parecido com issoContinua não recebendo. Fica uma tela branca.
Os dois campos que ficam fixos, esses sim são enviados e recebidos.
Fiz o teste e funcionou perfeitamente...
com certeza a info está em alguma parte que não está chegando no seu código.
Usei esse html e o arquivo abaixo é: "teste.php"
o retorno é cada "Evento" em uma linha
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
var max_fields = 100; //maximum input boxes allowed
var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID
var token = $('#token').val();
var x = 1; //initlal text box count
$(add_button).on({click: function(e){ //on add input button click
e.preventDefault();
var length = wrapper.find("input:text").length;
if (x < max_fields) { //max input box allowed
x++; //text box increment
$(wrapper).append('<div class="box-footer"><a href="#" class="remove_field btn btn-danger pull-right"><i class="fa fa-close"></i></a><div class="col-md-12"><h2>Novo Evento</h2></div><div class="form-group col-md-6"><label for="nome_evento">Evento</label><input type="text" class="form-control" id="nome_evento" name="evento[]" placeholder="Nome do Evento" required /></div><div class="form-group col-md-3"><label for="carencia">Carência</label><input type="text" class="form-control" id="carencia" name="carencia[]" placeholder="Dias de Carência" required /></div><div class="form-group col-md-3"><label for="reducao_carencia">Redução de Carência</label><input type="text" class="form-control" id="reducao_carencia" name="reducao_carencia[]" placeholder="Dias de Redução" /></div><div class="clearfix"></div><div class="form-group col-md-12"><label for="descricao">Mais Informações</label><textarea class="textarea" name="descricao[]" placeholder="Descreva as informações aqui!" style="width: 100%; height: 200px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;" required></textarea></div></div>'); //add input box
}
wrapper.find("input:hidden").each(function() {
$(this).val()
});
}});
$(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
e.preventDefault();
$(this).parent('div').remove();
x--;
})
});
</script>
<form action="teste.php" method="post">
<div class="form-group col-md-6">
<label for="nome">Nome Plano</label>
<input type="text" class="form-control" id="nome" name="nome" placeholder="Nome do Plano" required />
</div>
<div class="form-group col-md-6">
<label for="mais_informacoes">Mais Informações</label>
<textarea class="textarea" name="mais_informacoes" placeholder="Descreva as informações adicionais aqui!" style="width: 100%; height: 200px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;" ></textarea>
</div>
<div class="input_fields_wrap">
<!-- RECEBE OS NOVOS INPUTS -->
</div>
<div class="form-group col-md-12">
<button type="button" class="btn btn-full add_field_button"><i class="fa fa-plus"></i>Adicionar Evento</button>
<button type="submit" class="btn btn-info pull-right" id="teste">Cadastrar</button>
</div>
</form>
<?php
if(isset($_POST['evento'])) {
$evento = $_POST['evento'];
$carencia = $_POST['carencia'];
$reducao_carencia = $_POST['reducao_carencia'];
$descricao = $_POST['descricao'];
foreach( $evento as $key => $n ) {
echo $evento[$key]." e ".$carencia[$key]." e ".$reducao_carencia[$key]." e ".$descricao[$key]."<br>";
}
}
?>Opa valeu!
Consegui não estava enviando porque eu estava fechando o form antes da tag section no meu codigo.
estava assim:
<form>
<section>
</form>
</section>
quando ajustei a hierarquia funcionou perfeitamente.
Obrigado pela ajuda.
tipa esse código como código q fica melhor para vermos, e coloca o html... usa o jsfiddle se possivel.
Assim conseguimos "testar"
o html é importante para vermos onde você esta incluindo esse html... qual o elemente q recebe o append.... ele esta dentro de um form? etc