Ir para conteúdo

POWERED BY:

Arquivado

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

amatos25

PHP vs FIREFOX vs JS

Recommended Posts

Dúvida cruel galera.Olha o que está acontecendo.Tenho um formulário com uma DIV dentro.Tenho um botão ao lado da DIV.Quando é clicado no botão, chamo uma função que adiciona dentro da DIV por 'INNERHTML' vários campos de forma dinâmica.Até ai tudo bem correto?Botei um botãozinho a mais para dar um 'ALERT' no valor desses campos que gero dinamicamente e tanto no FF como no IE é mostrado o valor certinho.O problema vem agora!! Qndo dou um 'SUBMIT' nesse formulário (após ter gerado os campos e testado o 'ALERT' pra exibir o value) tento capturar na página seguinte (action do form) os tais campos gerados dinamicamente. O meu problema é que no IE eu dou 'request.form com ASP', dou '$_POST[".."] com PHP' e o valor é retornado, agora com FIREFOX não vem nada nada nada....Como explicar? É como se no Firefox qndo dou innerHTML ele gera tudo mas só na "memória" do navegador e qndo dou um SUBMIT tudo isso se perde. Estranho não??Estou pesquisando solução mas ainda não encontrei.PS: Usando AJAX para carregar SELECTS (COMBOBOXs) precisei adicionar campos 'hidden' para capturar o valor selecionado dos SELECTS e enfim capturar os 'hiddens' na página seguinte pois o FIREFOX não reconhece os campos SELECTS gerados por AJAX.

Compartilhar este post


Link para o post
Compartilhar em outros sites

amatos, isso não é um assunto relacionado ao PHPisso é um problema de versoes antigas do IE, o qual jah corrigiu na versao 6.1 em diante.o firefox é um excelente browser mas ainda estah aprendendo, cometendo os mesmos erros do IE.o que pode estar acontecendo é que os objetos gerados após a interpretação do código HTML, estejam sendo colocados no ultimo nivel da hierarquia do codigo, por isso, tem até um certa lógica o que você comentou

ele gera tudo mas só na "memória" do navegador

Todo o código gerado após a 1ª interpretação do html, está sendo interpretado como fora do corpo.Mas preste atenção porque o problema real pode nao ser isso que comentei. Pode ser algum erro seu na estrutura do código. Se puder postar aqui seria melhor, mas nao convém postar se for muito extenso ok ?dica: teste também nos navegadores Nestscape e Opera

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou movendo para javascript ok??la o mais gente poderá te ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites
<script> function nd(){    inp = document.createElement('input');   var dive = document.getElementById('cont');   dive.appendChild( inp );   inp.setAttribute( 'name', 'nada' ); }  </script> <form method="POST"> <div id="cont"> </div> <input type="submit" value="Submit"> <input type="button" value="Adiciona campo" onclick="nd()"></form><?phpecho $_POST["nada"];?>
Certamente você está fazendo algo errado, pois quando se cria um objeto dinamicamente o mesmo tem o comportamento identico ao criado em tempo de programação, bastando para isso a correta manipulação dos mesmos.O Firefox apresentará mais problemas do que o IE pois o mesmo é mais normalizado que o IE.O Firefox não está repetindo os erros do ridículo IE você deve se atentar as normas de programação client-side, antes de sair falando que o poblema é o Browser.No exemplo acima simulei mais ou menos o que você está fazendo e funcionou perfeitamente, provavelmente você está fazendo algo errado.Em todo caso teste esse código para ver como funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal...estou tendo esse mesmo problema...é como se os inputs que estão na pagina criados pelo ajax (innerHTML) nao existissem quando eu dou um Submit no firefox...no IE funciona certinho....alguem ja consertou esse problema??Abraços,T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

com o innerHTML você apenas escreve um html dentro de um elemento e não cria objetos explicitos para ser manipulados.

 

utilize o document.createElement citado pelo slipce

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que eu nao quero criar um objeto...eu já tenho uma outra página com os objetos devidamente criados e o que o innerHTML faz é jogar essa página que já esta criada com objetos criados dentro dela....(São Vários input)...então ficaria inviavel fazer isso...o que estou fazendo é aquela simples função ajax para chamar uma outra página com conteudo dentro de uma div.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz da forma que o slice nos explicou...

 

o dele funcionou certinho...

 

porem o que eu fiz não deu certo

 

o que pode ser

 

segeu codigo

 

function addMail(){	email = document.createElement('input');	var dive = document.getElementById('mail');	dive.appendChild( email );	email.setAttribute( 'type', 'text' );	email.setAttribute( 'name', 'email[]' );	email.setAttribute( 'id', 'email[]' );	email.setAttribute( 'maxlength', '60' );		email.setAttribute( 'size', '45' );	email.setAttribute( 'onkeyup', 'this.value = this.value.toUpperCase()' );}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe, tanto tempo depois não sei se você precisa mais, mas se mais alguém estiver procurando uma solução pra este problema, encontrei uma.

 

Quando você troca a combo pela nova preenchida vinda por ajax, no firefox o seu Form perde a referência para o campo, e o campo novo também perde a referência para o form, este é o motivo de quando você dá submit, o campo não aparece.

 

A solução que encontramos aqui, foi ao invés de preencher a div com o select inteiro novo, manter a tag select e trocar apenas os options, usando document.getElementById("nomeDoCombo").innerHTML.

 

com isso as referências não são perdidas o/

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.