[PHP] Erro numa linha de código só em IE, em FireFox funciona

DJ Drum`n

Power Member
Boas pessoal,

Eu tenho aqui o seguinte código que me está a dar erro mas apenas no Internet Explorer, pois no FireFox funciona perfeitamente bem.

Código:
     $('.fund-ppcheck').click(function() {
      if($(this).prev().find('input').is(':checked') && !$(this).is(':checked')) {
       $(this).prev().find('input').attr('checked', false);
       $(this).prev().find('img').attr('src', 'themes/dj/images/fund-apcheck.jpg');
       $(this).next().find('input').attr('checked', false); /* É nesta linha que aparece o erro*/
       $(this).next().find('img').attr('src', 'themes/dj/images/fund-bacheck.jpg');
      }
     });

Alguém me consegue ajudar só com isto ou é necessário mais informação?

Eu não percebo nada de programação PHP, ainda estou a aprender.

Desde já o meu obrigado.

Cumprimentos,
Pedro Lima
 
isso não é PHP mas jQuery

Olá,

Agradeço desde já a ajuda e a explicação. Percebo tanto disto que nem soube distingir entre PHP e jQuery! :P

O erro persiste. :(

Eis o que o IE mostra:

Detalhes do erro da página Web
Agente do Utilizador: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; MATM)
Carimbo de data/hora: Thu, 17 Feb 2011 21:58:19 UTC

Mensagem: O objecto não suporta esta propriedade ou método
Linha: 96
Caráct: 6
Código: 0
URL: http://WEBSITE/acc.php?addrb

Alguma ajuda que me possa ser dada a partir destes dados ou são necessários mais?

Obrigado.
 
Na linha que dá erro, adiciona antes do código que dá erro algo como:
alert( $(this).next().find('input').get(0) ); para descobrir se o INPUT a que tás a tentar fazer check, realmente permite um check, pode ser uma inputbox ou assim que esteja a a incomodar o IE. Nunca me deparei com esse problema =/
 
qual é a versao do IE que estas a utilizar?

IE 8

Na linha que dá erro, adiciona antes do código que dá erro algo como:
alert( $(this).next().find('input').get(0) ); para descobrir se o INPUT a que tás a tentar fazer check, realmente permite um check, pode ser uma inputbox ou assim que esteja a a incomodar o IE. Nunca me deparei com esse problema =/

Eu inseri essa linha acima da que está a dar erro e, o estranho, é que o erro aparece SEMPRE na mesma linha e é sempre o mesmo. Ou seja, independentemente do que eu insira lá! :S

Eis o erro:

Detalhes do erro da página Web
Agente do Utilizador: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; MATM)
Carimbo de data/hora: Sat, 19 Feb 2011 19:33:20 UTC

Mensagem: O objecto não suporta esta propriedade ou método
Linha: 96
Caráct: 6
Código: 0
URL: http://WEBSITE/acc.php?addrb


Ou seja, exactamente o mesmo! :(

O que me aconselham a fazer?

PS: Mesmo após ter alterado o código, em FireFox continua a funcionar!
 
Tens a certeza que no Firefox não tens erros? O IE "chateia" logo com erros de JavaScript, mas os outros browsers costumam simplesmente mandá-los para a consola. Acho que tens de ir a "Tools > JavaScript Console" ou assim e ver.
 
Última edição:
Tens a certeza que no Firefox não tens erros? O IE "chateia" logo com erros de JavaScript, mas os outros browsers costumam simplesmente mandá-los para a consola. Acho que tens de ir a "Tools > JavaScript Console" ou assim e ver.

Pois, também já eu tinha tentado verificar algum erro apresentado no FireFox, mas nada! :(

Pura e simplesmente executa na perfeição o código.
 
Parte essa linha em pedaços para descobrir qual das partes é que falha:

Código:
var x1 = $(this);
var x2 = x1.next();
var x3 = x2.find('input')
x3.attr('checked', false);
 
Parte essa linha em pedaços para descobrir qual das partes é que falha:

Código:
var x1 = $(this);
var x2 = x1.next();
var x3 = x2.find('input')
x3.attr('checked', false);

Há aqui qualquer coisa que não está a bater nada, nada certo! O erro que aparece é exactamente igual!

O que me deixa confuso é, porque motivo eu altero o ficheiro e isto continua sempre a dar o mesmo erro... :S

Será que há algum código mais em cima onde ao carregar no botão em questão ele chama outro ficheiro? vou tentar descobrir isso...

Muito obrigado a todos pela vossa ajuda pessoal. Continuem a mandar dicas que são todas mais que bem-vindas. ;)

Abraços.
 
Ok pessoal, estive a verificar e talvez isto vos ajude:

Código:
function checkamount() { /*checkamount é a var atribuida ao botão em questão*/
     var amount = document.forms[0].amount.value;
     var error = document.getElementsByClassName('error');
     error = error[0];
     error.innerHTML = '';
     if(!IsNumeric(amount)) error.innerHTML = 'O montante não é válido';
     if(amount < {$set['min_addbalance']}) error.innerHTML = 'Tem que adicionar, pelo menos, €{$set['min_addbalance']}.';
 
     if(!error.innerHTML) document.forms[0].submit();
}

Ainda dentro do mesmo ficheiro mas um pouco mais abaixo, também existe este form:

Código:
<form method=\"post\" action=\"\">
      <div><label>Montante (EUR):</label> <input type=\"text\" name=\"amount\" /></div>
      <div class=\"buttons\"><input type=\"button\" onclick=\"checkamount()\" value=\"Seguinte\" /></div>
      <input type=\"hidden\" name=\"step1\" value=\"1\" />
</form>

Será que isto ajuda de alguma forma?

EDIT:

Já agora, pesquisei também pelo "addrb" que aparece no URL: http://WEBSITE/acc.php?addrb

Código:
 if(isset($_GET['addrb'])) { (...)

Claro está que este código não setá completo e só estou a mostrar o IF.

E também isto:

Código:
<ul>
     <li>Saldo total: <b>€{$balance} EUR</b></li>
     <li><a href=\"advpanel.php?add\">Saldo de anúnciante</a>: <b>€{$adbalance} EUR</b></li>
     <li><a href=\"?addrb\">Saldo para publicidade</a>: <b>€{$rbalance} EUR</b></li>
     <li>Pago: <b>€{$withdrew} EUR</b></li>
</ul>

Será que este novo edit vos ajuda? :(

PS: Tudo o que estou a falar é SEMPRE no mesmo ficheiro, existem muitos outros ficheiros mas tudo o que indico é sempre no mesmo.

EDIT 2:

Alterei o ficheiro em causa e removi por completo (o código que inseri no post inicial) e funcionou tudo sem problema no FireFox e no IE o erro foi, ainda assim, exactamente o mesmo, na mesma linha. O que significa que não é naquela linha de código que está o problema...

EDIT 3:

A luta não está fácil, mas no próprio site, ao verificar o código-fonte no IE, reparei que a linha 96 é esta:
Código:
var error = document.getElementsByClassName('error');

Isto ajuda?

EDIT 4:

Já estive a Googlar mas é pena eu não saber programar em jQuery, porque se não já tinha resolvido o problema porque parece que o erro está mesmo num conflito qualquer entre o "document.getElementsByClassName" e o próprio IE.

Eu vou colocar-vos aqui o código completo onde está inserida aquela linha:

Código:
/*o que está antes julgo não interessar*/
 
}else {
  $contents .= "
   <script type=\"text/javascript\">
   //<![CDATA[
    function checkamount() {
     var amount = document.forms[0].amount.value;
     var error = document.getElementsByClassName('error');
     error = error[0];
     error.innerHTML = '';
     if(!IsNumeric(amount)) error.innerHTML = 'O montante não é válido';
     if(amount < {$set['min_addbalance']}) error.innerHTML = 'Tem que adicionar, pelo menos, €{$set['min_addbalance']}.';
    
     if(!error.innerHTML) document.forms[0].submit();
    }

    function IsNumeric(sText) {
     var ValidChars = '0123456789.';
     var IsNumber=true;
     var Char;
 
     for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1)  {
       IsNumber = false;
      }
     }
     return IsNumber;
    }
   //]]>
   </script>
   <h1>Adicionar saldo: Passo 1</h1>
   <div class=\"error\">$error</div>
   <div class=\"center\">O montante mínimo que pode adicionar é de €{$set['min_addbalance']}.</div>
   <div>
    <div class=\"bigbox\">
     <div class=\"top\"></div>
     <form method=\"post\" action=\"\">
      <div><label>Montante (EUR):</label> <input type=\"text\" name=\"amount\" /></div>
      <div class=\"buttons\"><input type=\"button\" onclick=\"checkamount()\" value=\"Seguinte\" /></div>
      <input type=\"hidden\" name=\"step1\" value=\"1\" />
     </form>
     <div class=\"foot\"></div>
    </div>
   </div>
   <div class=\"foot\"></div>
  </div>
 </div>";
 }

Acho que agora sim, com isto já me vão conseguir ajudar! :D
 
Última edição:
comenta a linha e ve se continua a dar erro. (não, nao estou a gozar)

Obrigado pela ajuda. Eu sei que às vezes as soluções nestes casos são ridículas, mas infelizmente não foi o caso.

Continua tudo exactamente na mesma. :(

EDIT:

Já agora, apanhei outro erro numa outra página (este não influencia em nada de importante, mas seja como for não deixa de ser um erro). Se alguém souber também a solução deste, fico agradecido. :)

Código:
if(a[i].innerHTML != "Caps" && a[i].innerHTML != "Shift") {
  a[i].addEventListener('click', keyclick, false); /*O ERRO APARECE NESTA LINHA*/
}
 
Obrigado pela ajuda. Eu sei que às vezes as soluções nestes casos são ridículas, mas infelizmente não foi o caso.

Continua tudo exactamente na mesma. :(

EDIT:

Já agora, apanhei outro erro numa outra página (este não influencia em nada de importante, mas seja como for não deixa de ser um erro). Se alguém souber também a solução deste, fico agradecido. :)

Código:
if(a[i].innerHTML != "Caps" && a[i].innerHTML != "Shift") {
  a[i].addEventListener('click', keyclick, false); /*O ERRO APARECE NESTA LINHA*/
}

Comentado dá erro na mesma linha? Se dá, entao ou estas apanhar cache do browser, ou estas a editar o ficheiro errado.

o IE nao suporta addEventListener, mas ja que estas a usar jQuery, aconselho-te a usa-lo para delegar eventos. Nesse caso e com tradução directa, e provavelmente a gastar mais recursos do que e necessario, mas nao sei o resto do codigo para avaliar, troca essa linha por:

Código:
var el = $(a).eq(i).selector
$('body').delegate(el, 'click', keyclick);

caso nao funcione, ou mostras mais codigo ou teras que por um if() para o caso de ser IE e fazeres attachEvent()
 
Comentado dá erro na mesma linha? Se dá, entao ou estas apanhar cache do browser, ou estas a editar o ficheiro errado.

Mas espera lá, quando disseste para eu comentar a linha referias-te a que eu inserisse um comentário em frente a essa linha ou que convertesse a linha toda num comentário? Se eu converter a linha num comentário era igual a elimina-la, certo? É que já a eliminei e ele dava outro erro... porque aquela linha já não estava lá.

o IE nao suporta addEventListener, mas ja que estas a usar jQuery, aconselho-te a usa-lo para delegar eventos. Nesse caso e com tradução directa, e provavelmente a gastar mais recursos do que e necessario, mas nao sei o resto do codigo para avaliar, troca essa linha por:


Amigo, eu infelizmente tenho conhecimentos muito básicos sobre programação. Não sei fazer isso. :P

E já agora, muito obrigado por toda a ajuda. ;)

EDIT:

Já agora, o erro que dá após ter comentado aquela linha de código é este:

Detalhes do erro da página Web
Agente do Utilizador: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; MATM)
Carimbo de data/hora: Mon, 21 Feb 2011 23:55:31 UTC

Mensagem: 'error' não está definido
Linha: 97
Caráct: 6
Código: 0
URL: http://WEBSITE/acc.php?addrb
 
Última edição:
Leste o que o anjo2 escreveu? A linha que o IE indica refere-se à linha do documento depois de interpretado pelo servidor e não à linha do ficheiro original (no caso deste conter código PHP).
 
Leste o que o anjo2 escreveu? A linha que o IE indica refere-se à linha do documento depois de interpretado pelo servidor e não à linha do ficheiro original (no caso deste conter código PHP).

Li e dai eu ter indicado inicialmente a linha errada. Mas quando o anjo2 disse aquilo já eu tinha indicado há alguns posts atrás a linha de código correcta e eu mesmo reconheci esse meu erro inicial.

Após ter chegado a essa conclusão verifiquei qual a linha no IE (depois do código interpretado) e pesquisei por essa linha no respectivo documento. Que estava lá para a linha 300 e tal.

Seja como for, obrigado.
 
Back
Topo