Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
Conflito entre script do Adianti e o feito no form Pessoal, estou com um problema de conflito aqui com o jQuery. Tenho um formulário com um TRadioGroup com duas opções. Eu configurei para que esse radio ficasse em forma de botão (botão despesa e botão receita). Fiz uma função jQuery no formulário para que quando o usuário clicar no botão despesa ele mudar para vermelho e quando clicar no outro botão (receita) mudar a cor para verde....
AA
Conflito entre script do Adianti e o feito no form  
Pessoal, estou com um problema de conflito aqui com o jQuery.

Tenho um formulário com um TRadioGroup com duas opções. Eu configurei para que esse radio ficasse em forma de botão (botão despesa e botão receita). Fiz uma função jQuery no formulário para que quando o usuário clicar no botão despesa ele mudar para vermelho e quando clicar no outro botão (receita) mudar a cor para verde.

$js = " $(document).ready(function(){ $('label.btn').click(function(){ var e = $('input[name=\'flag\']'); for (let i =0; i < e.length; i++) { if (e[i].checked) { console.log('O botão selecionado foi: '+e[i].value); if (e[i].value == 'Despesa'){ e.parent()[i].className = 'btn btn-danger active'; e.parent()[1].className = 'btn btn-default'; } else { e.parent()[i].className = 'btn btn-success active'; e.parent()[0].className = 'btn btn-default'; } } } }); }); "; TScript::create($js);


Inclui essa função no
__construct__
da classe
TWindow
.

O script funciona perfeitamente fora do framework, mas no Adianti ele está apresentando um comportamento estranho. É necessário que eu clique duas vezes no botão para que a função funcione como esperado.

Pelo
console
percebi que quando clico no botão o Adianti executa também a função nativa do TRadioGroup e por isso acho que esteja dando conflito com minha função.

Alguém já passou por isso e sabe resolver?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


NR

Acho que o atributo "checked" está sendo atualizado após a sua função, dessa forma no if dentro da função ele ainda tem o valor anterior.
Tente capturar o valor selecionado antes do for e utilizar esse valor nas comparações posteriores:
var indice_selecionado = $(this).children('input').val(); for...
AA

Exatamente como você pensou, Nataniel.

Consegui resolver com a sua ajuda. Obrigadão. Eis a solução para quem tiver interesse:
$(document).ready(function(){ $('label.btn').click(function(){ var indice_selecionado = $(this).children('input').val(); if (indice_selecionado == 'Despesa'){ $(this).removeClass().addClass('btn btn-danger active'); $(this).siblings().removeClass().addClass('btn btn-default'); } else { $(this).removeClass().addClass('btn btn-success active'); $(this).siblings().removeClass().addClass('btn btn-default'); } }); });
AA

Segue código em PHP para maior legibilidade:

 
  1. <?php
  2. $(document).ready(function(){
  3. $('label.btn').click(function(){
  4. var indice_selecionado = $(this).children('input').val();
  5. if (indice_selecionado == 'Despesa'){
  6. $(this).removeClass().addClass('btn btn-danger active');
  7. $(this).siblings().removeClass().addClass('btn btn-default');
  8. } else {
  9. $(this).removeClass().addClass('btn btn-success active');
  10. $(this).siblings().removeClass().addClass('btn btn-default');
  11. }
  12. });
  13. });
  14. ?>