-
Total de itens
1327 -
Registro em
-
Última visita
-
Dias vencidos
15
Tudo que Omar~ postou
-
<style> #myDIV { background-color: red; width: 0; height: 0; opacity: 0; transition: 1s } #myDIV.exemplo { width: 200px; height: 200px; opacity: 1 } </style> <button onclick="myFunction()">click</button> <div id="myDIV"></div> <script> var myDIV = document.getElementById('myDIV'); function myFunction() { myDIV.classList.toggle('exemplo'); } </script>
-
Quando for postar código tenha o bom senso de usar a ferramenta "Code" do editor aqui. É o botãozinho "<>" na barra de ferramentas do ckeditor, com esse simples gesto você agiliza a interpretação do código para quem vai te ajudar. - Ao problema.... Você não pode usar o evento "click" em cima do input porque quem recebe esse evento é a tag label, portanto para que der certo você deve verificar o click no local correto. Porém como label está vinculado ao input você pode detectar cada alteração desse input. Vejamos: <nav class="menu" id="principal"> <ul> <li><a href="#" class="home">Home</a></li> </ul> </nav> <input type="checkbox" id="chk" name="exemplo" /> <label for="chk">Clique Aqui</label> <script> var chk = document.getElementById('chk'), menu = document.getElementById('principal'); chk.checked = null; // Em caso de atulização do documento o checkbox muda para desmarcado function funcaoExemplo(e) { if (e.target.checked) { /* >>> Isso é válido se #principal for Absoluto(absolute) ou fixo(fixed) * menu.setAttribute('style', 'left:300px'); */ menu.setAttribute('style', 'margin-left:300px'); } else { // Caso não seja marcado remove o atributo style menu.removeAttribute('style'); } return (false); } chk.addEventListener('change', funcaoExemplo, false); </script>
- 2 respostas
-
A sua dúvida é muito vaga... Você diz: passe valores do GET (Que é um protocolo URL) Mas o código você apresenta é um prototype de um objeto Então não faz sentido algum o título em questão para a dúvida Bom, se você quiser capturar as entradas GET pode fazer assim: var entradasGET = location.search.slice(1).split('&'), indices = [], objetos = {}; entradasGET.forEach(function (e) { indices = e.split('='); objetos[indices[0]] = indices[1]; }); console.log(objetos); //Digamos a url assim: ?alguma_coisa=valor_A&outra_coisa=valor_B&mais_outra=valor_C //O resultado: Object { alguma_coisa: "valor_A", outra_coisa: "valor_B", mais_outra: "valor_C" } De fato nunca precisei e nunca ouvi falar de alguém que precisou mexer nesses dados no lado do usuário, isso é algo que sempre é usado no lado do servidor.... Mas se for a questão está aí. Porém se você quer obter a resposta de uma requisição, não vou reinventar a roda aqui pois já criei um magnifico script para essa finalidade: https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest Mas se a questão for uma instância da classe XMLHttpRequest onload para o prototype responseText é sempre um boleano "true" então a função onload não pode ser usada porque a partir da instância load é válido (mesmo antes que a resposta exista). Tente então obter a resposta da requisição if ((request.readyState === 4) && (request.status === 200)) { // A resposta existe e está pronta para ser usada, portando pode ir para o manipulador do DOM document.getElementById('greeting').innerHTML = request.responseText; }
-
Domínio bloqueado no antivírus
Omar~ respondeu ao pergunta de Luiz Fernandes em Perguntas e respostas rápidas
- A princípio o domínio pode está em uma lista negra nos servidores do Avast como sendo algo fornecedor/disseminador de malwares. - Ou pode ser que a aplicação utilizasse de scripts nocivos tanto para o software quanto para o hardware de alguém que acessa. - Propagandas abusivas até demais o que se enquadra também no caso de scripts. - Certificados enganosos ou inválidos. - Tentativa de roubo de cookies ou qualquer tipo de dados do usuário. - Mineração de bitcoins. Não sei quanto ao comportamento do avast, mas é um ´software de proteção, portanto esses são os principais motivos ao qual ele pode chegar a bloquear um endereço. Ou simplesmente má configuração do seu avast aí. -
Não entrando em como o dompdf insere imagens pois o problema pode ser ele. E nem se essas essas imagens são enviadas por upload. Verifique a orientação da imagem, Provavelmente seja essa a questão. Por exemplo no meu smartphone uma foto tirada Se vista pelo visualizador de imagem do próprio fica normal. Se se vista por um documento html fica normal. Se vista pelo editor básico de imagem do meu Ubuntu ela fica de ponta-cabeça virada 180º. Se vista no Photoshop fica virada -180º. Se vista pelo visualizador de imagem do windows fica virada como espelho e 180º. E por aí vai.... Cada um interpreta a orientação de um jeito. Pode não ser o seu caso e pode ser que o próprio dompdf está fazendo m***** e desorientando a imagem (o que é bem provável). Mas se não for o caso tente alterar a orientação pelo exif da imagem. Para detalhes veja esse método dessa classe: https://github.com/Spell-Master/sm-web/blob/master/exemplos/corte-e-salvamento-de-imagens/ImageUpload.php#L194 Era um problema para mim então criei esse método dessa classe que ao enviar uma imagem por upload a classe automaticamente faz a correção da orientação quando necessário.
-
Que botão? O contexto PHP é para renderizar um script e não um botão. A propósito isso é inconsistente na renderização pois uma linha independente é gerada após a outra devido as várias repetições da função echo, seria ideal só usar uma vez a função e ir inserindo contexto por contexto para que exista somente uma renderização. Sei lá digamos que esse checkout.js irá criar algum botão no documento, isso não é problema PHP (back-end) e sim Javascript (Front-End). Se for esse o caso sugiro que busque a documentação ou contate o(s) desenvolvedor(es) do mesmo para esclarecimento como utilizar-lo
-
@biakelly como o methus já disse o uso dessas chaves "{ }" são para mostrar algo que já existe. Portanto nessa linha: Você não está mostrando e sim criando algo o que foge da regra dessas chaves, e nesse caso você pode concatenar.. echo "data-amount='" . $row['totalbrl']*100 . "'"; Além do mais você pode está escapando... <?php //echo " "cometendo um erro de escape" "; isso gera erro porque uma áspa fecha outra echo ' \'escapando com áspas simples\' '; echo " \"escapando com áspas duplas\" ";
-
Na verdade isso seria o caminho. Me estranha que você montou a lógica corretamente, porque não estaria funcionando? Talvez o uso de variáveis ao invés dos índices no resultado? Bom... Resultados de querys no php sempre nos retornam um array independente da aplicação de busca seja PDO seja MySqli, então o que podemos é percorrer esse array e a cada índice criar os elementos: <?php $banco_de_dados = [ ['id' => 0, 'nome' => 'Rio', 'endereco' => 'Rio de Janeio'], ['id' => 1, 'nome' => 'Paulo', 'endereco' => 'São Paulo'], ['id' => 2, 'nome' => 'Salvador', 'endereco' => 'Bahia'], ['id' => 3, 'nome' => 'Vitória', 'endereco' => 'Espirito Santo'] ]; ?> <table> <?php foreach ($banco_de_dados as $value) { ?> <tr id="cliente-<?= $value['id'] ?>"> <td data-nome="<?= $value['nome'] ?>"><?= $value['nome'] ?></td> <td data-endereco="<?= $value['endereco'] ?>"><?= $value['endereco'] ?></td> <td><button onclick="adicionar('cliente-<?= $value['id'] ?>')">Adicionar</button></td> </tr> <?php } ?> </table> Note que ao invés de usar a função echo do php toda hora apenas mandei exibir o valor usando <?= /* Algo a exibir */ ?>
- 4 respostas
-
- javascript
- campo
-
(e mais 2 )
Tags:
-
Começando pelo principal problema que na verdade é: Vários erros em seu HTML. O atributo global #ID deve ser único pois seu objetivo é distinguir alguma coisa de outra. Portanto quando você declara vários: Entre os demais, você está cometendo um erro gravíssimo de interpretação e hierarquia no HTML por isso só funciona em um, porque só deveria existir em um. Ou seja nunca repita o #ID com a mesma propriedade! Você terá que construir algo que possa ser reaproveitado. Antigamente nessas situações tínhamos que compor um objeto com todos os valores, mas desde o html5 a coisa ficou mais fácil, temos um novo atributo global que podemos buscar no documento e esse assim como diversos outros podem se repetir. Então você só obtêm uma referencia única que pode ser um #ID para distinguir quais serão os elementos de busca. Veja isso: <table> <tr id="cliente-1"> <!-- ID "1" para o primeiro cliente --> <td data-nome="joão">João</td> <td data-endereco="endereço a">Endereço A</td> <td><button onclick="adicionar('cliente-1')">Adicionar</button></td> </tr> <tr id="cliente-2"> <!-- ID "2" para o segundo cliente --> <td data-nome="maria">Maria</td> <td data-endereco="endereço b">Endereço B</td> <td><button onclick="adicionar('cliente-2')">Adicionar</button></td> </tr> </table> Nome: <input type="text" name="nome" id="nome" /> Endereço: <input type="text" name="endereco" id="endereco" /> Perceba que definir os #ID diferente em cada coluna "tr" da table, e é assim que posso chegar até os atributos data que são meus alvos, apenas informando para a função o #id da coluna. var nome = document.getElementById('nome'), endereco = document.getElementById('endereco'), tdNome = null, tdEndereco = null; function adicionar(id_alvo) { var trID = document.getElementById(id_alvo); tdNome = trID.querySelector('[data-nome]').dataset.nome; tdEndereco = trID.querySelector('[data-endereco]').dataset.endereco; nome.value = tdNome; endereco.value = tdEndereco; } Basta que siga esse procedimento para adicionar mais campos como desejar. Completando... sobre erros de HTML.... Toda tag deve ser fechada! Mesmo que o browser percebe o erro e tenta corrigir, você pode se deparar com problemas na estrutura do documento, quanto mais problemas mais interpretações aleatórias pode acontecer pelo browser. Portanto quando declarar uma tag <input> não se esqueça que ela deve ser fechada. <input type="text" /> Mais de 90% dos problemas com css e javascript podem ser solucionados apenas escrevendo o html corretamente. Dica de desempenho... Evite criar variáveis dentro do escopo de uma função, porque consome uma certa % de memória RAM para criar, e apenas reescrever consome muitíssimo menos. Evite ao máximo buscar por elementos dentro do escopo de um função, lembre-se que quando você passa um getElementById por exemplo o javascript deve ler todo o documento para encontrar esse alvo. Se ele já foi buscado e encontrado, não há necessidade de encontrar-lo novamente. Mesmo que em diversos casos coisas como essas são indispensáveis, mas devem ser evitadas a todo custo.
- 4 respostas
-
- javascript
- campo
-
(e mais 2 )
Tags:
-
A solução é fazer novamente um join na tabela de usuário Ou seja um para o autor outro para o editor. Na questão preferir então fazer o que sempre faço nessa situação: 2 selects e comparar os dados pelo php.
-
<?php function longText($string, $length) { $str = (string) $string; $keys = ((int) $length + 3); return (mb_strimwidth($str, 0, $keys, '...')); } $texto_para_encurtar = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit'; // Encurtando em 11 caracteres echo longText($texto_para_encurtar, 11); // Resultado "Lorem ipsum..."
- 3 respostas
-
- encurtamento
- truncar
-
(e mais 1 )
Tags:
-
Nada mais é que um básico para carrinho de compras.... <form id="myForm"> <input type="text" name="qualquer_coisa"> <!-- Isso agiliza o script para que não precise ficar catalogando cada elemento antes de adicionar novo --> <div id="novos_inpus"></div> <button type="button" onclick="addInput()">+</button> <button type="submit">Enviar</button> </form> <script> var novos = document.getElementById('novos_inpus'); var quantidade = 0; // Contar e identificar input adicionado var maximo = 3; // Quantos input's podem ser adicionados? function addInput() { if (quantidade < maximo) { var novoInput = document.createElement('input'); var botaoRemover = document.createElement('button'); novoInput.type = 'text'; novoInput.name = 'novo[]'; // Como serão vários inputs o name deve ser um array novoInput.className = 'para colocar quantos classificador quiser'; botaoRemover.type = 'button'; botaoRemover.innerHTML = 'Remover -'; botaoRemover.className = 'para colocar quantos classificador quiser'; botaoRemover.addEventListener('click', removerInput, false); novos.appendChild(novoInput); novos.appendChild(botaoRemover); quantidade += 1; } return (false); } function removerInput(e) { var click = e.target; // Botão clicado // click.parentNode: é o elemento mais próximo em que ele está no caso "#novos_inpus" // previousElementSibling: é o elemento anterior mais próximo dele no caso o "input" click.parentNode.removeChild(click.previousElementSibling); click.parentNode.removeChild(click); quantidade -= 1; return (false); } </script>
- 2 respostas
-
- campos
- javascript
-
(e mais 3 )
Tags:
-
Recuperar SPAN que tenha 2 atributos definidos
Omar~ respondeu ao tópico de FabianoSouza em Javascript
Uai! se fosse só pela declaração do atributo era simples.... porque normalmente nessas situações buscamos por um elemento em específico. Talvez seria uma boa usar um elemento identificado "#ID"? Sei lá, depende da arquitetura da aplicação aí..... -
Recuperar SPAN que tenha 2 atributos definidos
Omar~ respondeu ao tópico de FabianoSouza em Javascript
Tenta assim: var elTpReporte = document.querySelectorAll('[data-click="1"]'); var itens = []; elTpReporte.forEach(function (e) { if (e.classList.contains('sp-tp-reporte')) { itens.push(e); } }); console.log(itens); Não sei se é o melhor jeito, mas deve funcionar como esperado -
porque html5 funciona bem no computador, mas no smartphone não?
Omar~ respondeu ao pergunta de Manoel Cicero em Perguntas e respostas rápidas
O problema não é o HTML e sim script: Poste o código da função que é executada com o click.- 1 resposta
-
- html5
- powerpoint
-
(e mais 1 )
Tags:
-
Tenta assim: RowDataPacket.liv_codigo // Se for um objeto o resultado é "5" Pois a linguagem javascript não possui array str indexado, e me parece que seu caso é um object. Se estamos falando da mesma coisa leia: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/keys https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/values
-
Se for para acompanhar a rolagem tem que usar fixed. O fato de está quebrando o html é quase certeza absoluta que é por causa de erros na estrutura html. Uma vez que a propriedade fixed não altera o fluxo de outras tag's no documento. Obs.: Nesses casos para melhor ajudar seria bom apresentar algum website que usa algo igual ou similar ao pretendido, até mesmo imagens podem ajudar. Sendo o código em si menos relevante. Na verdade o outros elementos que vão se "mover" Dê uma olhada nisso, pelo que você mencionou foi o que imaginei que está tentando fazer:
-
Transformar date("Y-m-d H:i") em uma string 2021-04-22T00:00
Omar~ respondeu ao tópico de unset em PHP
<?php function dateTime($dateTime) { $timestamp = explode(' ', $dateTime); $getDate = implode('/', array_reverse(explode('-', $timestamp[0]))); return ($getDate . (isset($timestamp[1]) && preg_match('/:/', $timestamp[1]) ? ' T' . $timestamp[1] : null) ); } var_dump( dateTime('1111-22-33'), dateTime(date('Y-m-d')), dateTime('1111-22-33 44:55'), dateTime(date('Y-m-d H:i')) ); -
Quanto mais curto melhor para o usuário. Mas no geral tanto faz mesmo... Depende também do modelo de arquitetura da aplicação, pois se você precisa gerenciar conteúdos com informações pela url ajuda demais.
-
Primeiro que isso é impossível com 100% de precisão, porque a quantidade de informação disponível para ser extraída do usuário é mínima. Mas obtendo dados da máquina de quem acessa + endereço de IP você tem até um margem alta de acerto. Veja essa classe: Então você armazena em algum lugar dados da máquina que quando outro cadastro for requisitado você compara os valores se forem iguais o cadastro não continua. Exemplo: $agent = new UserAgent(); $dadosDeAcesso = $agent->getOs() . $agent->requestIP(); // Uma string com o sistema operacional e IP do usuário
-
Problema de atualização no mobile
Omar~ respondeu ao tópico de ernestovm em Desenvolvimento frontend
Primeiramente devemos deixar bem claro que isso não é em nada prejudicial ao usuário. Pois é! O salvamento em cache é vital para o usuário final. E essa questão não se aplica só ao Chrome e sim a todos browser's atuais. O que de fato atualmente todos os browser são uma porcaria para desenvolver. Entretanto, como já referido. Uma vez publicado a aplicação e ela está pronta, não há necessidade de ficar modificando html/css/js isso deve ser feito durante o processo de desenvolvimento. Para o desenvolvedor podemos nos utilizar de "gabiarras" para não ter em cache. Um dos recursos mais simples é sempre usar janela anônima, assim sendo o browser irá apagar todo cache quando reiniciado. Outra forma mais radical, usado junto a janela anônima (QUE NUNCA DEVE PERMANECER NA APLICAÇÃO DEPOIS DE PUBLICADA). É se por exemplo sua linguagem back-end for o php exemplo: <link href="folha_de_estilo.css?r=<?= time() ?>" rel="stylesheet" type="text/css" /> Com esse truque a cada atualização da página um novo CSS é gerado tendo sido modificado ou não. Porém como mencionei novo download será feito então isso nunca deve ser imposto ao usuário porque você só estaria prejudicando ele e deixando sua aplicação lenta. Só com essa gabiarra você poderá desenvolver sua aplicação tranquilamente. Outras alternativas: Se você usa linux você pode está usando algum cron que por sua vez pode ser configurado para limpar seu cache de navegação a cada X minutos (É isso que eu uso) Se você usa windows é poder optar por versões bem antigas do Mozilla ou Chrome que suportam CSS3 e HTML5. Essas versões antigas haviam a possibilidade de salvar o cache em memória ao invés de disco, assim sendo toda vez que a página era atualizada, a memória era re-escrita. No entanto no caso do chrome você deve desativar os processos autônomos de update no windows, porque ele atualiza mesmo sem que você esteja com o chrome aberto. Um outro ponto forte do chrome e do mozilla mais antigos é que são bem mais leves, práticos e não tinham tantos bugs como os de hoje em dia. -
Basicamente é simples, pois você vai armazenar os índices do gráfico no back-end em um array exemplo: <?php $indicesDoGrafico = [55, 30, 15]; E esses então você irá usar no javascript, mas como o javascript que front-end não se relaciona com o back você já tem que entregar isso renderizado para o browser. Acontece que array em PHP é uma coisa e array em JavasSript é outra completamente diferente você tem que fazer a conversão; o JSON é uma alternativa pois ambas linguagens usam esse paradigma igualmente. Então no javascript faça a conversão: var dados = JSON.parse('<?= json_encode($indicesDoGrafico) ?>'); Assim sendo você terá o array necessário para usar no "chart", apenas informando esse array: /* data: [55, 30, 15], // *os dados deverão ser impressos aqui */ data: dados, Não que isso tenha haver com seu problema só de bater o olho já vi, mas faça a correção nos escapes de objetos no seu código do cart "tem virgula sendo usada em local que não deveria". Isso causa lentidão de processamento, pois o browser deve fazer esses ajustes antes de executar o script
-
Existe alguma maneira de fazer um transition em javascript??
Omar~ respondeu ao tópico de Sapinn em Javascript
<style> .barra { position: fixed; z-index: 1; top: 0; left: 0; width: 100%; height: 70px; background-color: #090b13; opacity: 0; transition: .8s; /* Deixe o contador de aqui para ter efeito fade-in & fade-out */ pointer-events: none /* Não interagir com click's quando estiver invisível */ } .transition { opacity: .7; pointer-events: auto } </style> <div style="height: 1900px"></div> <div class="barra"> Lorem ipsum dolor sit amet </div> <script> var rolagem = 0; var barra = document.querySelector('div.barra'); document.addEventListener('scroll', rolarPagina, false); function rolarPagina(e) { rolagem = window.scrollY; if (rolagem > 900) { barra.classList.add('transition'); } else { barra.classList.remove('transition'); } } </script>- 2 respostas
-
- javascript
- transition
-
(e mais 2 )
Tags:
-
Verificar se já existe o nome cadastro no banco de dados
Omar~ respondeu ao tópico de Jack Oliveira em PHP
Faça a leitura no banco de dados previamente e armazene todos nomes em um array. Transforme esse array em string para ser usado no javascript. No javascript converta essa string em array. Ao submeter o formulário compare se o valor do input condiz com algum índice do array. <?php $nomes = [ 'Patinhas', 'Luizionho', 'Zezinho', 'Gaguinho' ]; ?> <form method="POST" action="" id="id_do_formulario" onsubmit="return(salvarFormulario())"> <input type="text" name="nome_empresa" id="nome_empresa" /> <button>Enviar</button> </form> <script> var nomes = JSON.parse('<?= json_encode($nomes) ?>'); function salvarFormulario() { var empresa = document.getElementById('nome_empresa').value.trim(); if (nomes.includes(empresa)) { console.log('O nome ' + empresa + ' já existe'); } else { console.log('O nome ' + empresa + ' não existe'); document.getElementById('id_do_formulario').submit(); } return (false); } </script> -
Dentro dessa condicional pois a operação aqui deve ser concluída "readyState == 4" e a requisição deve ter tido sucesso "status >= 200"..... E isso "$obj.status <= 299" nem deveria está dentro da condicional