Ir para conteúdo

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 ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • 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 belann
      Olá!
       
      Estou fazendo o upload de arquivos com fetch dessa forma
      fetch(url, {
              method: 'POST',
              headers: {'Content-Type': 'multipart/form-data',},
              body: formData 
          }).catch((error) => (console.log("Problemas com o Upload"), error));
       
      estou usando input type=file
      e criando uma const formData = new FormData(); 
      mas não faz e não dá nenhum erro.
      estou fazendo o upload com a url="http://localhost/dashboard/dados".
    • Por joeythai
      Boa tarde pessoal,
       
      Eu criei um formulário em que tenho 3 interações: evento click, change e uma chamada ajax. No evento on change ("select#removal_table_from" )eu faço uma chamada ajax onde eu passo como parametro o id do item selecionado e construo uma tabela dinamica com o próprio javascript, após isto, tenho um input em que o usuario coloca um valor de percentual para que eu possa preencher em 3 colunas da tabela que foi criada dinamicamente: moto_atualizado, carro_atualizado e caminhao_atualizado, até aí tudo bem, o codigo está fazendo isso, porém, como a tabela é criada dinamicamente eu preciso de alguma forma enviar o arrayData para meu backend mas quando faço o calculo dentro do loop apos resposta do meu ajax, os valores desses 3 campos chegam como null, não sei se é possível fazer o que pretendo ou se é ainda não sei como faz
       
      <code>
           $(document).ready(function (event) {   let arrayData = []; let percentage; let removal_vehicle; let removal_motorcycle; let removal_tuck; let apply_removal = $('#apply_removal');   // apply_removal.on('click', function () { // percentage = $('#percentage').val();   // $('.table-body tr').each(function () {   // let veiculo = $(this).find('.veiculo').text(); // let moto = $(this).find('.moto').text(); // let caminhao = $(this).find('.caminhao').text();   // let removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; // let removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; // let removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   // arrayData.push({ // removal_vehicle, // removal_motorcycle, // removal_tuck // })   // $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); // $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); // $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2)); // }); // });   apply_removal.on('click', function () { percentage = $('#percentage').val();   $('.table-body tr').each(function () {   let veiculo = $(this).find('.veiculo').text(); let moto = $(this).find('.moto').text(); let caminhao = $(this).find('.caminhao').text();   removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   arrayData.push({ removal_vehicle, removal_motorcycle, removal_tuck })   $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));     console.log('Removal Vehicle:', removal_vehicle); console.log('Removal Motorcycle:', removal_motorcycle); console.log('Removal Truck:', removal_tuck); }); });   $('select#removal_table_from').on('change', function (e) { let table_id = $(this).val(); let action = route('removal.removal-values.show', table_id);   $.ajax({ type: "GET", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },   success: function (data) { $('.table-body').empty();   for (let i = 0; i < data.length; i++) { let carro = parseFloat(data[i].CARRO); let moto = parseFloat(data[i].MOTO); let caminhao = parseFloat(data[i].CAMINHAO); let distancia = data[i].DISTANCIA; let origem = data[i].ORIGEM; let destino = data[i].DESTINO; let localidadeOrigem = data[i].LocalidadeOrigem_ID; let localidadeDestino = data[i].LocalidadeDestino_ID;   let newRow = '<tr class="removal-row">' + '<td class="align-middle">' + '<div class="row">' + '<div class="col-1">' + '<span class="font-weight-bold">Origem</span><br>' + '<span class="origem">' + origem + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Destino</span><br>' + '<span class="destino">' + destino + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">KM</span><br>' + '<span class="km">' + distancia + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Veículo</span><br>' + '<span class="veiculo">' + carro + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Veículo Atualizado</span><br>' + '<input type="text" class="veiculo_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Moto</span><br>' + '<span class="moto">' + moto + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Moto Atualizado</span><br>' + '<input type="text" class="moto_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Caminhão</span><br>' + '<span class="caminhao">' + caminhao + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Caminhão Atualizado</span><br>' + '<input type="text" class="caminhao_atualizado">' + '</div>' + '</div>' + '</div>' + '</td>' + '</tr>';   $('.table-body').append(newRow); //let row = $('.removal-row:last');   // Calcula o valor atualizado e define nos campos diretamente // let veiculo_atualizado = carro + (carro * percentage) / 100; // let moto_atualizado = moto + (moto * percentage) / 100; // let caminhao_atualizado = caminhao + (caminhao * percentage) / 100; // console.log('PORCENTS: ', percentage); //console.log('Veiculo Atualizado:', veiculo_atualizado, 'Moto Atualizado:', moto_atualizado, 'Caminhao Atualizado:', caminhao_atualizado);   // Define os valores diretamente nos campos da nova linha // row.find('.veiculo_atualizado').val(veiculo_atualizado.toFixed(2)); // row.find('.moto_atualizado').val(moto_atualizado.toFixed(2)); // row.find('.caminhao_atualizado').val(caminhao_atualizado.toFixed(2));   arrayData.push({ carro, moto, caminhao, distancia, origem, destino, localidadeOrigem, localidadeDestino, removal_vehicle, removal_motorcycle, removal_tuck }); }   $('#copy_data_table').val(JSON.stringify(arrayData)); }   }); });   //javascript para o formulario de cadastro // $(document).ready(function (event) { $('#uf').change(function () { let code_city = $(this).val(); let deposit = localStorage.getItem('selected_deposit_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city').empty(); $('#deposit').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '<option>'); }   if (data.deposits.length > 0) { for (let i = 0; i < data.deposits.length; i++) { $('#deposit').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '<option>'); } } else { // $('#deposit').prop('disabled', true); // $('#city').prop('disabled', false); }   $('#city').trigger('change'); } });   });   $('#deposit').on('change', function () { depositId = $(this).val(); localStorage.setItem('selected_deposit_id', depositId); });   $('#uf_destiny').change(function () { let code_city = $(this).val(); let depositDestiny = localStorage.getItem('selected_deposit_destiny_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city_destiny').empty(); $('#deposit_destiny').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city_destiny').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '</option>'); }   if (data.deposits.length > 0) { // $('#deposit_destiny').prop('disabled', false); //$('#city_destiny').empty(); // $('#city_destiny').prop('disabled', true); for (let i = 0; i < data.deposits.length; i++) { $('#deposit_destiny').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '</option>'); } } else { // $('#deposit_destiny').prop('disabled', true); // $('#city_destiny').prop('disabled', false); }   $('#city_destiny').trigger('change'); } }); });   $('#deposit_destiny').on('change', function () { let depositDestinyId = $(this).val(); localStorage.setItem('selected_deposit_destiny_id', depositDestinyId); });   }); </code>
×

Informação importante

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