Ir para conteúdo

POWERED BY:

Arquivado

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

Danilo MC

mudar a classe do botão.

Recommended Posts

Olá, boa tarde,

amigos preciso da ajuda para uma lista de produtos q tenho em minha loja, pois tenho um botão q quando clico nele, ele adiciona no carrinho de compras e conta no carrinho, assim posso adicionar vários ao carrinho e ele vai contando, porem se clico no msm botão várias vezes ele conta, eu preciso desabilitar o botão após ele ter sido clicado e tbm preciso mudar a imagem dele para o usuario ver q ele foi adicionado.

 

o código é o seguinte.

 

o submit com a class botão q preciso mudar a imagem

<div class="item-btn" >
<ul>
<li >
<a href="index.php?id=<?php echo $id; ?>" class="btn" >
<input type="submit" class="botao" value="" onclick="conta();"> // este item tem q ser desabilitado e trocar a imagem.
</a>
 
 
</li>
<li><a href="index.php?link=3&id=<?php echo $id; ?>" onclick="window.location.reload(false);"><img src="img/btn-informacoes.svg" width="107px" height="auto" /></a></li>
</ul>
 
</div>

 

o javascript q tenho

 

 
function id( el ){
    return document.getElementById( el );
}
function getHTTPObject(){
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else if(window.ActiveXObject){
        var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
        for(var i = 0; i < prefixes.length; i++){
            try{
                return new ActiveXObject(prefixes[i] + ".XMLHTTP");
            } catch (e) {}
        }
    }
}
 
function disablelink( e ){
    var evt = window.event || e
    if (evt.preventDefault) //supports preventDefault?
        evt.preventDefault()
    else //IE browser
        return false
}
window.onload = function()
{
    var as = id('item').getElementsByClassName('btn');
    
    for( i in as ){
        as[i].onclick = function( event ){
        
            var arq = this.href;
            var xmlHttp = getHTTPObject();
            xmlHttp.open( "GET", arq, true );
            xmlHttp.onreadystatechange = function(){
                if (xmlHttp.readyState == 4){
                    id('result').innerHTML = xmlHttp.responseText;
                }
            }
            xmlHttp.send( null );
            
            return disablelink( event );
            
        }
    }
    
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Guilherme eu fiz a incrementação mais ainda não funcionou.

 

$('button.botao').attr('disabled', $(".botao2").disabled = true);

 

inseri para chamar as classes criadas no css

 

.botao
{
background: url('../img/btn-addlista.svg') no-repeat;
background-size: 107px;
border: none;
width: 110px;
height: 32px;
margin-top:5px;
cursor:pointer;
}
 
.botao2{
background: url('../img/btn-jaadd') no-repeat;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem vamos lá.

Esse código não tá meio zuado não?

Tipo você tem um <a href=... Dentro desse um submit?

É um link ou um formulário?

 

Se for o caso de formulário pode fazer assim:

<form method="post" onsubmit="return funcao();">

 

A função por sua vez vai validar o post redir os inputs, redimensionar.

Sobre alterar os elementos quando clicados com Javascript

 

2 horas atrás, Guilherme Luiz disse:

$('button.classeDoSeuBotao').attr('disabled', $(".classeDoSeuBotao").disabled = true);

 

Ele tá usando javascript puro, e isso que mostrou usa jquery, não funciona no script dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Omar~ eu consegui fazer com o seu exemplo o menu mudar de cor, mais ele muda uns 3 ou quatro de uma vez qndo clico em um item. Também mudei a forma como estava o botão de input para button que é o mais correto pois não tem nenhum form nele.

 

os problemas q seguem agora é q a contagem ela segue mesmo após o button mudar de cor e eu não queria q tivesse contagem no meu conte quando o item fosse clicado e tbm quando clicar no button eu quero q mude apenas o item q cliquei e não os outros tbm.

 

segue o código q editei

 

button

<li>
<a href="index.php?id=<?php echo $id; ?>" class="btn" >
<button class="botao" value="" onclick="conta();modifica(<?php echo $id_imovel; ?>);"> </button>
</a>
</li>

 

script

<script>
 
var $cls = document.getElementsByClassName('botao');
var $i;
function modifica(param) {
for ($i = 0; $i < $cls.length; $i++) {
$cls[$i].className = 'botao2';
 
 
}
$cls[param].className = 'botao2';
}

 

 
var vCont = 0;
function conta(){
vCont = vCont + 1;
document.getElementById('contador').value = vCont;
 
}
 
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso dar uma dica?

Deixe seu código mais limpo e eficaz, ao invéns de ficar passando função por função você tem 2 alternativas mais coesas.

 

1 - Usar Javascript orientado a objeto (é bem melhor): https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

 

2 - Validar tudo em 1 única função que faz tudo.

 

Bem, você tem a função conta();

Tente assim: onclick="conta(this);"

Ou seja envio o botão que foi clicado para a função lá tenho o parâmetro que é esse botão onde posso fazer o quem bem entender com ele e ainda trabalhar com o que mais quiser quando aquele botão é clicado:

Citar

function conta(parametro) {

    parametro.style.background = "red";

 

 

E no caso disso:

for ($i = 0; $i < $cls.length; $i++) {

$cls[$i].className = 'botao2';

}

Faz o script percorrer todos os índices e enquanto existir vai modificando, então é isso que faz todos botões ficarem iguais quando a função é ativada:

 

Agora não acionar o mesmo botão 2 vezes.

Eu faria assim porque é mais prático e rápido fazer isso no JS, assim se for o caso de enviar um post via ajax não precisa ficar filtrando dados no script porque os inputs já vão está todos prontos no front é só reaproveitar:

Criaria um botão fake que não executa função alguma e é idêntico ao botão verdadeiro.

No css deixo com propriedade display: none;

Ao clicar no botão real que vai está no mesmo local seto o botão com display none, e o que estava oculto altero sua propriedade para display block.

Assim sendo troco os botões, imperceptível exceto se alguém for inspecionar o código fonte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua lógica para o Display foi perfeita para mim, consegui aplicar e deu certo, ele muda o botão e para a contagem, mais os índices eu não consegui fazer item por item, pois quando clico em 1 botão ela aplica para todos, eu tentei aplicar uma lógica  q segue abaixo mais não funcionou, mais estou enviando pq meus conhecimentos técnicos do javascript é limitado e com sua ajuda resolvo isso.

 

 

<a href="index.php?id=<?php echo $id; ?>" class="btn" >
<button class="botao" value="" onclick="conta();modifica(this);"> </button>
<button class="botao2" value=""> </button>
</a>

 

<script>
var $cls = document.getElementsByClassName('botao');
var $cls2 = document.getElementsByClassName('botao2');
var $i;
function modifica(parametro) {
for ($i = 0; $i < $cls.length; $i++) {
$cls[$i].style.display = 'none';
$cls2[$i].style.display = 'block';
}
$cls[parametro].style.display = 'none';
$cls2[parametro].style.display = 'block';
}
 
 
</script>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Em 15/11/2017 at 23:17, Danilo MC disse:

Sua lógica para o Display foi perfeita para mim, consegui aplicar e deu certo, ele muda o botão e para a contagem, mais os índices eu não consegui fazer item por item, pois quando clico em 1 botão ela aplica para todos, eu tentei aplicar uma lógica  q segue abaixo mais não funcionou, mais estou enviando pq meus conhecimentos técnicos do javascript é limitado e com sua ajuda resolvo isso.

 

Na verdade só disse uma forma de fazer, das inúmeras possibilidades.

Veja criei um exemplo aqui só manipulando o html. Onde tenho vários botões que ao clicar em 1 executo a função, se ele já foi clicado, é verificado seu elemento, e se sim ele não faz nada.

 

Spoiler

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Checagem se o botão já foi clicado</title>
        <script src="VerificarClique.js" type="text/javascript"></script>
        <style>
            button {
                width: 6rem;
                cursor: pointer;
                outline: none
            }
            button.reset {
                padding: .625rem;
                background-color: #bb0;
                border: none
            }
        </style>
    </head>
    <body>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>
        <button class="botao">Desativado</button>

        <br>
        <button class="reset" onclick="return clickCheck.resetarBotao()">Resetar</button>
        <hr>
        <div id="mostra"></div>

        <script>clickCheck = new VerificarClique();</script>
    </body>
</html>

 

 

Arquivo VerificarClique.js

Spoiler

var VerificarClique = function () {
    var $cliques = 0;
    var $botao = document.getElementsByClassName('botao');
    var $quantBt = $botao.length;
    var $i;

    for ($i = 0; $i < $quantBt; $i++) {
        $botao[$i].onclick = function () {
            if (this.className !== 'botao ativado') {
                recebeValor(this);
            } else {
                return false;
            }
        };
    }

    function recebeValor(parametro) {
        $cliques++;
        parametro.className += ' ativado';
        parametro.style.opacity = '0.5';
        parametro.innerHTML = 'Ativado';

        document.getElementById('mostra').innerHTML = 'Botões que foram clicados: ' + $cliques;
    };

    this.resetarBotao = function () {
        for ($i = 0; $i < $quantBt; $i++) {
            if ($botao[$i].className === 'botao ativado') {
                $botao[$i].className = 'botao';
                $botao[$i].style.opacity = '1';
                $botao[$i].innerHTML = 'Desativado';
            }
        }
        $cliques = 0;
        document.getElementById('mostra').innerHTML = 'Todos botões foram resetados';
    };
};

 

 

Para entender como funciona, use o "Inspecionar Elemento" do navegador, e veja como a função manipula o html.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • 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
       
       
    • Por violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
    • Por violin101
      Caros amigos, saudações.

      Estou com uma pequena dúvida se é possível ser realizado.

      Preciso passar 2 IDs para o Sistema executar a função, estou utilizando desta forma e gostaria de saber como faço via JS para passar os parâmetro que preciso.

      Observação:
      Dentro da TABELA utilizei 2 Forms, para passar os IDS que preciso, funcionou conforme código abaixo.
      <div class="card-body"> <table id="tab_clie" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center; width:10%;">Pedido Nº</th> <th style="text-align:center; width:10%;">Data Pedido</th> <th style="text-align:center; width:32%;">Fornecedor</th> <th style="text-align:center; width:10%;">Status</th> <th style="text-align:center; width:5%;">Ação</th> </tr> </thead> <tbody> <?php foreach ($results as $r) { $dta_ped = date(('d/m/Y'), strtotime($r->dataPedido)); switch ($r->pd_status) { case '1': $status = '&nbsp;&nbsp;Aberto&nbsp;&nbsp;'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#000000'; //Cor: Preta break; case '2': $status = 'Atendido Total'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#086108'; //Cor: Verde break; case '3': $status = 'Atendido Parcial'; $txt = '#000000'; //Cor: Branco $cor = '#FEA118'; //Cor: Amarelo break; default: $status = 'Cancelado'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#D20101'; //Cor: Vermelho break; } echo '<tr>'; echo '<td width="10%" height="10" style="text-align:center;">'.$r->pd_numero.'</td>'; echo '<td width="10%" height="10" style="text-align:center;">'.$dta_ped.'</td>'; echo '<td width="32%" height="10" style="text-align:left;">'.$r->nome.'</td>'; echo '<td width="10%" height="10" style="text-align:left;"><span class="badge" style="color:'.$txt.'; background-color:'.$cor.'; border-color:'.$cor.'">'.$status.'</span></td>'; echo '<td width="5%" style="text-align:center;">'; ?> <div class="row"> <?php if($this->permission->checkPermission($this->session->userdata('permissao'), 'vPedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/visualizar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-warning" title="Visualizar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-search icon-white"></i></button> </form> <?php } if($this->permission->checkPermission($this->session->userdata('permissao'), 'ePedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/editar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-primary" title="Editar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-edit icon-white"></i></button> </form> <?php } ?> </div> <?php echo '</td>'; echo '</tr>'; } ?> </tbody> </table> </div>
      Grato,

      Cesar.
    • Por belann
      Olá!
       
      Estou usando o editor quill em uma página html, sem fazer a instalação com npm, mas usando as api´s via internet com http, no entanto não consigo fazer a tecla enter funcionar para mudança de linha, tentei essa configuração abaixo, mas não funcionou.
       
      modules: {       syntax: true,       toolbar: '#toolbar-container',       keyboard: {         bindings: {           enter: {             key: 13,             handler: function(range, context) {                       quill.formatLine(range.index, range.length, { 'align': '' });             }           }  
       
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de poder tirar uma dúvida com os amigos.
       
      Como faço uma função para Comparar a Data Digitada pelo o Usuário com a Data Atual ?

      Data Digitada:  01/09/2024
       
      Exemplo:
      25/09/2024 é menor que DATA Atual  ====> mensagem: informe uma data válida.
      25/09/2024 é igual DATA Atual ===> o sistema libera os INPUT's.
       
      Como faço uma comparação com a Data Atual, para não Deixar Gravar Data retroativa a data Atual.
       
      Grato,
       
      Cesar
×

Informação importante

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