DataTable

Olá pessoal, preciso de uma ajuda para entender o por que a minha data table não mostra a mascara em todos os registros, ele mostra somente no primeiro.

//codigo de listagem
<div class="row">
        <div class="col-xs-12">
            <div class="x_panel">
                <div class="row">
                    <div class="col-xs-12">
                        <div class="x_panel">
                            <div class="x_content">
                                <table id="datatable" class="table table-striped table-bordered">
                                    <thead>
                                    <tr>
                                        <th>Nome</th>
                                        <th>CPF</th>
                                        <th>E-mail</th>
                                        <th>Tel. Celular</th>
                                        <th>Cidade</th>
                                        <th>Ações</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <?php
                                    foreach($pacientes as $paciente) {
                                        ?>
                                         <tr class="<?php echo ($paciente->pes_ativo == 0 ? 'linha-off' : '' ); ?>">
                                            <td><?php echo $paciente->pes_nome; ?></td>
                                            <td id="cpf"><?php echo $paciente->pes_fis_cpf; ?></td>
                                            <td><?php echo $paciente->pes_email; ?></td>
                                            <td id="tel_celular"><?php echo $paciente->pes_celular; ?></td>
                                            <td><?php echo $paciente->cid_nome; ?></td>
                                            <td>
                                                <a href="<?php echo base_url('paciente/edicao/'.$paciente->pes_id); ?>" class="btn btn-round btn-primary"><i class="fa fa-edit"></i></a>
                                                <a href="<?php echo base_url('paciente/visualizacao/'.$paciente->pes_id); ?>" class="btn btn-round btn-default"><i class="fa fa-eye"></i></a>
                                            </td>
                                        </tr>
                                    <?php } ?>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

O id=“cpf” e id=“tel_celular” estão ali para que o jQuery Mask faça a sua parte. Quando eu clico em EDITAR ou VISUALIZAR ele preenche a mascara em todos os campos, somente na tabela que estou com problema.

Desde já agradeço pela ajuda.

Conceitos básicos de html:

id: único para cada elemento, logo não pode haver repetição, no seu caso há vários td’s com id "cpf"
class: vários elementos podem ter a mesma classe CSS, para o seu caso é o mais indicado…

<td class="mascara_cpf">...

E no jquery, imagino que você deixou um seletor parecido com isso:

$("#cpf")...

Usando class fica assim:

$(".mascara_cpf")...

Agora algumas dicas quanto a apresentação do seu código…

No foreach, comece e termine assim:

<?php foreach($pacientes as $paciente): ?>
...
<?php endforeach; ?>

Inclusive dentro do href por exemplo…

<a href="<?=base_url('paciente/edicao/'.$paciente->pes_id)?>"...

Dentro da tr onde existir <?php echo...?> se a versão do php for >=5.4, você pode usar um atalho (se for inferior, você precisa ativar a diretiva short_open_tag no php.ini)…

...
<?=$paciente->pes_nome?>
<?=$paciente->pes_fis_cpf?>
...

Vai por mim, ajuda muito na leitura do código, identificando o que é php e o que é html…

Olá @rodevops obrigado pela ajuda novamente, deu certo adicionando a class, eu não imaginava isso que comentou do ID. Eu sei que é único mas pelo fato de estar dentro de um FOR achei que não teria problema.

Quando a sintaxe achei muito interessante a abordagem <?= ?>, já no foreach não me senti a vontade com essa alternativa, mas obrigado elas dicas.

Não justifica, lembre-se que o for é uma repetição de código, logo pela lógica o que é estático (como o id cpf fixo que você colocou) será repetido…

Você tem todo o direito de estar desconfortável, mas… acostume-se a criar códigos imaginando sempre que está numa equipe (mesmo que sozinho no projeto), procure treinar uma visão de outra pessoa analisando seu código, por exemplo você é backend e trabalha junto com um frontend ou web designer, pense em facilitar a leitura para ele, acredite, isso ajuda e muito e evita que ele faça “mágicas” em partes do código que não devia…

1 curtida