Ir para conteúdo

Arquivado

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

Jorge Gomess

Utilizar vários datapickers em uma tabela carregada com ajax

Recommended Posts

Boa noite!

É o seguinte, a princípio, estou carregando uma tabela com dados mysql via ajax:

function fetch_data() {
                $.ajax({
                    url: "docentes/select.php",
                    method: "POST",
                    success: function (data) {
                        $('#live_data').html(data);
                    }
                });
            }

E em seguida faço manipulações para atualizar os dados, com isso, tudo certo. Entretanto, existe um campo da tabela que é para data, resolvi utilizar o Datepicker para deixar o campo mais elegante com a utilização de um calendário, se deparei com um problema ao utilizar vários Datepickers na mesma página, entretanto, designei uma ID única para cada input e uma classe igual para todos os inputs, classe a qual serviria de seletor para chamar a função datepicker, só que outro problema surge nessa jornada, este acontece por não estar executando a chamada da função datepicker, contudo, o seletor está correto, tem o mesmo identificador que o das classes dos inputs, não compreendo o por quê desse problema, por favor, peço vossa ajuda para a solução de meu problema, seguem códigos logo abaixo:

$(document).ready(function(){
        $(".datepicker").datepicker({
            dateFormat: "dd/mm/yy"
        });
  )};

Já tentei pôr eventos no input do DatePicker:

<div class="input-group">
   <input type="text" id="date_'.$inc.'" class="form-control datepicker" onmouseover="acionaDatePicker(\'#date_'.$inc.'\')" 
                    data-id="' . $Docente['id'] . '" data-before="' . $date . '" value="'.$date.'"/>
</div>

e no javascript:

function acionaDatePicker(seletor){
            $(seletor).datepicker({
                dateFormat: "dd/mm/yy"
            });
}

É como se não executasse o código do javascript nos dois casos.

Arquivos:

Código gerador de tabela com informações do banco, mais tarde será carregada com auxilio do ajax via POST na div de id = "live_data":

<?php
require('../../dts/dbaSis.php');
$readDocentes = read('docentes', 'ORDER BY admissao DESC');
$output = '
<table class="table table-bordered">
    <thead>
        <tr>
            <th>NOME</th>
            <th>SOBRENOME</th>
            <th>E-MAIL</th>
            <th>CURSO</th>
            <th>CENTRO DE REFERÊNCIA</th>
            <th>ADMISSÃO</th>
            <th>AÇÃO</th>
        </tr>
    </thead>
';
if (count($readDocentes) > 0) {
    $output .= '<tbody>';
    $inc = 0;
    foreach ($readDocentes as $Docente) :
        $output .= '
        <tr>
            <td class="nome" data-id="' . $Docente['id'] . '" data-before="' . $Docente['nome'] . '" contenteditable>' . $Docente['nome'] . '</td>
            <td class="sobrenome" data-id="' . $Docente['id'] . '" data-before="' . $Docente['sobrenome'] . '" contenteditable>' . $Docente['sobrenome'] . '</td>
            <td class="email" data-id="' . $Docente['id'] . '" data-before="' . $Docente['email'] . '" contenteditable>' . $Docente['email'] . '</td>
            <td class="curso" data-id="' . $Docente['id'] . '" data-before="' . $Docente['curso'] . '" contenteditable>' . $Docente['curso'] . '</td>
            <td>
                <select class="centro form-control" data-id="' . $Docente['id'] . '" data-before="' . $Docente['centro_ref'] . '">
                    <option></option>';
        $readCentro = read('centros_ref', '');
        if ($readCentro) {
            foreach ($readCentro as $Centro):
                if ($Centro['id'] == $Docente['centro_ref']) {
                    $output .= '<option value="' . $Centro['id'] . '" selected="selected">' . $Centro['nome'] . '</option>';
                } else {
                    $output .= '<option value="' . $Centro['id'] . '">' . $Centro['nome'] . '</option>';
                }
            endforeach;
        }
        $date = date('d/m/Y', strtotime($Docente['admissao']));
        $output .= '</select>
            </td>
            <td class="date">
                <div class="input-group">
                    <input type="text" id="date_'.$inc.'" class="form-control datepicker" onmouseover="acionaDatePicker(\'#date_'.$inc.'\')" 
                    data-id="' . $Docente['id'] . '" data-before="' . $date . '" value="'.$date.'"/>
                </div>
            </td>
            <td class="text-center"><button name="btn_delete" id="btn_delete" class="btn btn-xs btn-danger" data-id="' . $Docente['id'] . '">
            <i class="glyphicon glyphicon-trash"></i></button></td>
        </tr>
        ';
    $inc++;
    endforeach;
} else {
    $output .= '<tbody><tr>NÃO EXISTEM REGISTROS DE DOCENTES!</tr>';
}
$output .= '
    <tr>
        <td id="nome" contenteditable></td>
        <td id="sobrenome" contenteditable></td>
        <td id="email" contenteditable></td>
        <td id="curso" contenteditable></td>
        <td>
                <select id="centro" class="form-control">
                    <option></option>';
$readCentro = read('centros_ref', '');
if ($readCentro) {
    foreach ($readCentro as $Centro):
        $output .= '<option value="' . $Centro['id'] . '">' . $Centro['nome'] . '</option>';
    endforeach;
}
$output .= '</select>
            </td>
        <td class="date">
            <div class="input-group" >
                <input type="text" class="form-control" id="datetimepicker3" onmouseover="acionaTimepicker()"/>
            </div>
        </td>
        <td class="text-center"><button id="btn_add" class="btn btn-xs btn-success"><i class="glyphicon glyphicon-plus"></i></button></td>        
    </tr>
    ';
$output .= '</tbody></table>';
echo $output;
?>

Página onde serão exibidos os dados:

<div class="table-responsive">
    <h3>Gerenciamento de Docentes</h3>
    <div id="live_data"></div>
    <input type="text" class="form-control datepicker" />
</div>

Página onde ficam os códigos JAVASCRIPT:

<script src="<?php setHome(); ?>/js/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="js/bootstrap.js"></script>

<!-- TABELA COM DADOS CARREGADOS VIA AJAX -->
<?php
$url = stripslashes($_GET['exe']);
$url = explode('/', $url);
if ($url[1] == 'new-doc-edit') {
    ?>
    <script>
        $(document).ready(function () {
            function fetch_data() {
                $.ajax({
                    url: "docentes/select.php",
                    method: "POST",
                    success: function (data) {
                        $('#live_data').html(data);
                    }
                });
            }

            fetch_data();
            $(document).on('click', '#btn_add', function () {
                var nome = $('#nome').text(),
                    sobrenome = $('#sobrenome').text(),
                    email = $('#email').text(),
                    curso = $('#curso').text(),
                    centro_ref = $('#centro').val(),
                    admissao = $('#datetimepicker3').val();
                if (nome == '' || sobrenome == '' || email == '' || curso == '' || centro_ref == '' || admissao == '') {
                    return false;
                }
                $.ajax({
                    url: "docentes/insert.php",
                    method: "POST",
                    data: {
                        nome: nome,
                        sobrenome: sobrenome,
                        email: email,
                        curso: curso,
                        centro_ref: centro_ref,
                        admissao: admissao
                    },
                    dataType: "text",
                    success: function () {
                        alert('Dados adicionados com sucesso!');
                        fetch_data();
                    }
                });
            });

            function update(id, text, column_name) {
                $.ajax({
                    url: "docentes/update.php",
                    method: "POST",
                    data: {
                        id: id,
                        text: text,
                        column_name: column_name
                    },
                    dataType: "text",
                    success: function () {
                        alert('Dados atualizados com sucesso!');
                    }
                });
            }

            $(document).on('blur', '.nome', function () {
                var id = $(this).data("id"),
                    text = $(this).text(),
                    before = $(this).data("before");
                if (before != text) {
                    update(id, text, "nome");
                }
            });

            $(document).on('blur', '.sobrenome', function () {
                var id = $(this).data("id"),
                    text = $(this).text(),
                    before = $(this).data("before");
                if (before != text) {
                    update(id, text, "sobrenome");
                }
            });

            $(document).on('blur', '.email', function () {
                var id = $(this).data("id"),
                    text = $(this).text(),
                    before = $(this).data("before");
                if (before != text) {
                    update(id, text, "email");
                }
            });

            $(document).on('blur', '.curso', function () {
                var id = $(this).data("id"),
                    text = $(this).text(),
                    before = $(this).data("before");
                if (before != text) {
                    update(id, text, "curso");
                }
            });

            $(document).on('blur', '#datetimepicker4', function () {
                var id = $(this).data("id"),
                    val = $(this).val(),
                    before = $(this).data("before");
                if (before != val) {
                    update(id, val, "admissao");
                }
            });

            $(document).on('blur', '.centro', function () {
                var id = $(this).data("id"),
                    val = $(this).val(),
                    before = $(this).data("before");
                if (before != val) {
                    update(id, val, "centro_ref");
                }
            });

            $(document).on('click', '#btn_delete', function () {
                var id = $(this).data("id");
                $.ajax({
                    url: "docentes/delete.php",
                    method: "POST",
                    data: {
                        id: id
                    },
                    dataType: "text",
                    success: function () {
                        alert('Dados apagados com sucesso!');
                        fetch_data();
                    }
                });
            });
        });
    </script>
<?php } ?>

<script>
    $(document).ready(function(){
        $(".datepicker").datepicker({
            dateFormat: "dd/mm/yy"
        });
        function acionaDatePicker(seletor){
            $(seletor).datepicker({
                dateFormat: "dd/mm/yy"
            });
        }
    });
</script>

Caso eu não tenha sido claro quanto a minha dúvida, por favor, informem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, procure instanciar o datepicker após o load da tabela, pois como está hoje, ele chama quando abre a página porem a tabela ainda não foi criada.

function fetch_data() {
    //-- REMOVE OS PLUGINS ANTIGOS
    $(".datepicker").datepicker("destroy");

    $.ajax({
        url: "docentes/select.php",
        method: "POST",
        success: function (data) {
            $('#live_data').html(data);

            //-- INSTANCIA OS NOVOS PLUGINS
            $(".datepicker").datepicker({
                dateFormat: "dd/mm/yy"
            });
        }
    });
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, procure instanciar o datepicker após o load da tabela, pois como está hoje, ele chama quando abre a página porem a tabela ainda não foi criada.

function fetch_data() {
    //-- REMOVE OS PLUGINS ANTIGOS
    $(".datepicker").datepicker("destroy");

    $.ajax({
        url: "docentes/select.php",
        method: "POST",
        success: function (data) {
            $('#live_data').html(data);

            //-- INSTANCIA OS NOVOS PLUGINS
            $(".datepicker").datepicker({
                dateFormat: "dd/mm/yy"
            });
        }
    });
}
 

Muito obrigado mano, deu certo!

A desatenção foi tão grande que não estava percebendo isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por ILR master
      Salve galera.
       
      Vou publicar um evento e quero colocar um Cronômetro regressivo que mostre em tempo real os dias, horas e minutos que faltam para determinada data, tipo:.
      Faltam 5 dias, 12:30:00 para inauguração.
       
      Qdo chegar no dia, quero que apenas apareça uma mensagem.
       
      Alguém pode me ajudar?
    • Por ment0r
      Boa noite pessoal, tudo bem?
       
      Estou desenvolvendo um sistema simples com exibição de formulário via modal. Uma vez cadastrado o serviço (tabela possui apenas dois campos, id e nome), eles são exibidos numa tabela com um ícone que permite a alteração do nome.

       
      Eu clico no ícone e é chamado um modal que é gerado via ajax (pois são vários registros).
       

       
      Nesse modal é mostrado o serviço e uma vez alterado, o botão Salvar chama uma função que atualiza a tabela servico, concluindo a tarefa. Fiz o mesmo processo pra cadastrar o serviço, com a diferença de que o modal está presente na mesma página, ou seja, não é chamado via ajax.
       
      Eis os códigos:
      <a href="#" onclick="modalUpdate(<?= trim($array['id']) ?>)"> <i class='bx bx-edit'></i> </a> // Trecho onde eu chamo a função modalUpdate. Função btAltServico click:
      $('#btAltServico').click(function() { var inpnome = $('#nome'); var inpid = $('#id'); if (inpnome.val() == '') { swal("Atenção", "Por favor, preencha os campos obrigatórios", "warning"); if (inpnome.val() == '') { inpnome.css("border","2px solid #f94545"); } else { inpnome.css("border",""); } alert(inpnome); alert(inpid); } else { $.ajax({ url: '../inc/ajax/altServico.php', type: 'post', dataType: 'json', // pode ser html data: { nome : inpnome.val(), id : inpid.val() }, success: function(resposta){ if (resposta == 1) { inpnome.val(""); inpnome.css("border",""); swal("Sucesso", "Serviço alterado", "success"); } else { if (resposta == 0) { swal("Erro", "Serviço não alterado. Log de erro gerado.", "error"); } else { swal("Atenção", "Serviço já cadastrado", "warning"); } } } }) } });  
      E modalUpdate.php :
       
      <?php /* * altServico.php * * Script responsável pelo update de serviços na tabela servico * * Função chamada pelo arquivo ajax.js */ //if ($_POST) { require'../conn.php'; require'../../class/class.geral.php'; $geral = new Geral(); $nome = $_POST['nome']; $id = $_POST['nome']; $ativo = 1; // Verifica se o servico já foi cadastrado $sqlVer = "select nome from algo68_db_cliente.servico where nome = '".$nome."' and id <> ".$id.""; $queryVer = mysqli_query($conn, $sqlVer); $resultVer = mysqli_num_rows($queryVer); if ($resultVer > 0) { echo json_encode(2); // servico já cadastrado } else { // Update do servico $sql = "update algo68_db_cliente.servico set nome = '".$nome."', ativo = ".$ativo." where id = ".$id; $query = mysqli_query($conn, $sql); $result = mysqli_affected_rows($conn); if ($result > 0) { echo json_encode(1); // alterou o servico } else { $geral->logErro(date('d/m/Y|H:i:s'), @$_SERVER[REQUEST_URI], 'AlterarServico', mysqli_error($conn)); echo json_encode(0); // não alterou o servico } } //} ?> O problema é que quando clico no botão Salvar, não acontece nada - se eu colocar um alert qualquer na função click, só pra saber se está chegando, também não da nada. E está da mesma forma que o cadastro de serviço, que funciona perfeitamente.

      Bom, é isso pessoal, tentei ser o mais breve e especifico possível. Qualquer ajuda é bem vinda, obrigado a todos, desde já.
    • Por gersonab
      bom dia
      tenho uma aplicação onde gero um arquivo em pdf, gostaria de recuperar a url do pdf q foi criado, pois quando este é criado ele abre automaticamente e ou ja faz o download do mesmo, preciso da url para enviar para outros.
      <button type="button" class="btn btn-outline-primary" onclick="createPDF();">Imprimir</button> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/canvas2image@1.0.5/canvas2image.min.js"></script> <script language="javascript"> (function($){ $.fn.createPdf = function(parametros) { var config = { 'fileName':'html-to-pdf' }; if (parametros){ $.extend(config, parametros); } var orig = $(this); var widthOrig = $(orig).width(); $(orig).width(900); var quotes = document.getElementById($(orig).attr('id')); html2canvas(quotes, { onrendered: function(canvas) { var pdf = new jsPDF('p', 'pt', 'letter'); for (var i = 0; i <= quotes.clientHeight/900; i++) { var srcImg = canvas; var sX = 0; var sY = 900*i; var sWidth = 900; var sHeight = 900; var dX = 0; var dY = 0; var dWidth = 900; var dHeight = 900; window.onePageCanvas = document.createElement("canvas"); onePageCanvas.setAttribute('width', 900); onePageCanvas.setAttribute('height', 900); var ctx = onePageCanvas.getContext('2d'); ctx.drawImage(srcImg,sX,sY,sWidth,sHeight,dX,dY,dWidth,dHeight); var canvasDataURL = onePageCanvas.toDataURL("image/png", 1.0); var width = onePageCanvas.width; var height = onePageCanvas.clientHeight; if (i > 0) { pdf.addPage(612, 791); } pdf.setPage(i+1); pdf.addImage(canvasDataURL, 'PNG', 20, 40, (width*.62), (height*.62)); // Retirar o comentário caso queira ver como está sendo gerado o canvas. //document.body.appendChild(onePageCanvas); } pdf.save(config.fileName); $(orig).width(widthOrig); } }); }; })(jQuery); function createPDF() { $('#renderPDF').createPdf({ 'fileName' : '<?php echo $usercli['idocl']; ?>' }); }  
    • Por gersonab
      Boa tarde a todos.
      tenho pesquisado e ainda não encontrei uma forma de montar uma imagem online, tipo, tenho uma área de 400px por 400px , nesta gostaria de acrescentar algumas imagens que já tenho, tipo clicar e arrastar para dentro, sendo que estas imagens já se encontram online no site, seria mais ou menos assim : poderia colocar dentro desta área uma imagem do gato , do cachorro e ou outra. Não sei qual biblioteca ou forma de fazer.
      gostaria da ajuda para iniciar, desde já agradeço.
×

Informação importante

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