Ir para conteúdo

POWERED BY:

Arquivado

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

Buthy

[Resolvido] Radio button + Jquery

Recommended Posts

Então galera...

Fiz aqui um formulário onde tem radio button... Pra deixar o form mais bonito, usei esse plugin jquery:

http://www.maratz.com/blog/archives/2006/06/11/fancy-checkboxes-and-radio-buttons/

 

Está funcionando beleza...

 

O único problema é quando eu marco um, e depois o outro... o que tava marcado antes continua com a imagem de marcado...

 

Segue o JS:

<script type="text/javascript">
var d = document;
   var safari = (navigator.userAgent.toLowerCase().indexOf('safari') != -1) ? true : false;
   var gebtn = function(parEl,child) { return parEl.getElementsByTagName(child); };
   onload = function() {

       var body = gebtn(d,'body')[0];
       body.className = body.className && body.className != '' ? body.className + ' has-js' : 'has-js';

       if (!d.getElementById || !d.createTextNode) return;
       var ls = gebtn(d,'label');
       for (var i = 0; i < ls.length; i++) {
           var l = ls[i];
           if (l.className.indexOf('label_') == -1) continue;
           var inp = gebtn(l,'input')[0];
           if (l.className == 'label_check') {
               l.className = (safari && inp.checked == true || inp.checked) ? 'label_check c_on' : 'label_check c_off';
               l.onclick = check_it;
           };
           if (l.className == 'label_radio') {
               l.className = (safari && inp.checked == true || inp.checked) ? 'label_radio r_on' : 'label_radio r_off';
               l.onclick = turn_radio;
           };
       };
   };
   var check_it = function() {
       var inp = gebtn(this,'input')[0];
       if (this.className == 'label_check c_off' || (!safari && inp.checked)) {
           this.className = 'label_check c_on';
           if (safari) inp.click();
       } else {
           this.className = 'label_check c_off';
           if (safari) inp.click();
       };
   };
   var turn_radio = function() {
       var inp = gebtn(this,'input')[0];
       if (this.className == 'label_radio r_off' || inp.checked) {
           var ls = gebtn(this.parentNode,'label');
           for (var i = 0; i < ls.length; i++) {
               var l = ls[i];
               if (l.className.indexOf('label_radio') == -1)  continue;
               l.className = 'label_radio r_off';
           };
           this.className = 'label_radio r_on';
           if (safari) inp.click();
       } else {
           this.className = 'label_radio r_off';
           if (safari) inp.click();
       };
   };
</script>

 

CSS:

.has-js .label_check,
.has-js .label_radio { padding-left: 30px; }
.has-js .label_radio { background: url(../images/input/radio-unchecked.png) no-repeat; }
.has-js label.r_on { background: url(../images/input/radio-checked.png) no-repeat; }
.has-js .label_radio input { position: absolute; left: -9999px; }

 

Form:

<label class="label_radio">
<input type="radio" name="op" id="op" value="op1">
Opcao 1
</label>
<label class="label_radio">
<input type="radio" name="op" id="op" value="op2">
Opcao 2
</label>
<label class="label_radio">
<input type="radio" name="op" id="op" value="op3">
Opcao 3
</label>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está colocando o código Javascript entre o elemento body?

 

E a class das labels são: label_radio r_on e label_radio r_ff

Compartilhar este post


Link para o post
Compartilhar em outros sites

O javascript está sendo chamado em um arquivo externo, dentro do head.

 

Sim, mas no form eu tenho que deixar somente a label_radio, certo? Se é r_on ou r_off daí é o javascript que decide!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é por isso. Coloque um

 

window.onload = function()
{
// codigo javascript aqui
}

 

:clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi @Buthy,

 

a primeira coisa que já vi errada, é que o ID está repetido. Deixe assim:

 

 

<label class="label_radio">
<input type="radio" name="op" value="op1">
Opcao 1
</label>
<label class="label_radio">
<input type="radio" name="op" value="op2">
Opcao 2
</label>
<label class="label_radio">
<input type="radio" name="op" value="op3">
Opcao 3
</label>

 

depois debugue o script, apertando Ctrl+Shift+J no Firefox(aparecerá o console de erros).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, já consertei!

 

No firefox aparece isso:

 

Erro: unterminated string literal

Arquivo-fonte: http://www.fiskfronteira.com.br/index.php

Linha: 1, Coluna: 51

Código-fonte:

abrirPag('enquete/resultado.php?id_enquete=' + 1 + ');

 

<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=' + <?php echo $row_enq['id_enquete']; ?> + ');">» VER RESULTADO</a>

 

Esse erro é do meu outro tópico:

http://forum.imasters.com.br/topic/458893-problema-com-ajax/

 

Dá isso tbm:

Native module at path 'C:\Users\Buthy\AppData\Roaming\Mozilla\Firefox\Profiles\sc15mfsd.default\extensions\{f999a48b-1950-4d81-9971-79018f807b4b}\components\RadioWMPCoreGecko5.dll' is incompatible with this version of Firefox, has version 2, expected 10.

 

E vários outros alertas, mas dai nao sei se adianta de algo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

corrigido:

 

 

<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=' + <?php echo $row_enq['id_enquete']; ?> );">» VER RESULTADO</a>

 

 

rode agora, e diga oque acontece. Se dá certo ou aparece mais algum erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu esse agora:

 

Erro: xmlRequest is not defined

Arquivo-fonte: http://www.fiskfronteira.com.br/js/instrucao.js

Linha: 4

 

instrucao.js

function abrirPag(valor){
var url = valor;

xmlRequest.open("GET",url,true);    
xmlRequest.onreadystatechange = mudancaEstado;
xmlRequest.send(null);

if (xmlRequest.readyState == 1) {
	document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
}

return url;
}


function mudancaEstado(){
if (xmlRequest.readyState == 4){
	document.getElementById("enquete-ajax").innerHTML = xmlRequest.responseText;
}
}


$(function($) {
   // Quando o formulario for enviado, essa funcao eh chamada
   $("#form-enquete").submit(function() {
   // Colocamos os valores de cada campo em uma variavel para facilitar a manipulacao
   var id_enquete = $("#id_enquete").val();
   var op = $("#op").val();
   // Exibe mensagem de carregamento
   $("#status").html("<img src='images/loader.gif' alt='Enviando...' />");
   // Fazemos a requisao ajax com o arquivo envia.php e enviamos os valores de cada campo atraves do metodo POST
   $.post('../enquete/votar.php', {id_enquete: id_enquete, op: op}, 
   function(resposta) {
           // Quando terminada a requisicao
           // Exibe a div status
           $("#status").slideDown();
           // Se a resposta eh um erro
           if (resposta != false) {
			if (resposta = 1) {
				// Exibe o erro na div
				$("#status").html('<div style="color:#b1252a">Selecione uma opção.</div>');
			}
			if (resposta = 2) {
				// Exibe o erro na div
				$("#status").html('<div style="color:#b1252a">Você já votou na enquete hoje!</div>');
			}
           } 
           // Se resposta for false, ou seja, nao ocorreu nenhum erro
           else {
               // Exibe mensagem de sucesso
               $("#status").html('<div style="color:#07ac44;">Seu voto foi computado com sucesso!</div>');
           }
       });
   });
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, você está usando jQuery, então vamos usar jQuery:

//pre carregando o gif
var loading = new Image(); loading.src = 'images/loader.gif';

function abrirPag( valor ){

	var content = $('#enquete-ajax');

	content.html( '<img src="images/loader.gif" />' );

	var href = valor;
	$.ajax({
		url: href,
		success: function( data ){
			//apenas atrasando a troca, para mostrarmos o loading
			window.setTimeout( function(){
				content.fadeOut('slow', function(){
					content.html( data ).fadeIn();
				});
			}, 500 );
		}
	});
}

 

 

retorne com o novo report do console.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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