Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

orbitdigital

Input adicionado com .append() não envia os dados POST

Recommended Posts

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--;
  })

});

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>";
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
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 isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>";
	}
}

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.