Ir para conteúdo

POWERED BY:

Arquivado

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

Periscuelo

[Resolvido] eval não funciona no IE7

Recommended Posts

Bom dia amigos do fórum Imasters.

 

Estou com o seguinte problema.

 

Tenho uma combobox cujo a propriedade onChange executa uma função em javascript.

E eu estou criando outra função em javascript onde eu gostaria de que, ao ser chamada,

executasse a função que está descrita no onChange do meu combo box.

 

Para vocês entenderem melhor o que faz este script, ao clicar no primeiro combo box

ele lista dados do banco de dados em um combo box que fica abaixo dele. Quando eu

clicar em limpar eu quero que ele volte para opção todos onde o value é vazio e execute

o onChange que esta no mesmo para que a lista que havia sido carregada na combo box

de produto seja esvaziada.

 

Da forma como estão os scripts funciona perfeitamente no FF.

Porém no IE7 ele não executa a função eval.

 

Devo subistituir a eval por alguma outra função?

O que estou fazendo de errado?

Alguém pode me dar uma força?

 

Abaixo vão os códigos de ex:

 

Formulário

<form name="form1" id="form1" action="teste.php" method="POST">
  <select name="teste" id="teste" onChange="listaDados('form1','produto1', this.value)" /> 
	<option value"">Todos</option>
	<option value"1">Opcao 1</option>
	<option value"2">Opcao 2</option>
  </select>
  <select name="produto1" id="produto1" /></select>
<input type="button" name="limpar" id="limpar" value="Limpar Campo" onClick="limpaCampos('form1')"
</form>

Função listaDados

function listDados(nForms , produtos , valor ) {
 forms = nForms;
 produto = produtos;
 http.open("GET", "mostraDados.php?id=" + valor, true);
 http.onreadystatechange = handleHttpResponse;
 http.send(null);
}
 
function handleHttpResponse() {
 form = document.getElementById(forms);
 campo_select = form.elements[produto];
 if (http.readyState == 4) {
  campo_select.options.length = 0;
  results = http.responseText.split(";");
   for( i = 0; i < (results.length - 1); i++ ) {
	   string = results[i].split( "|" );
	   campo_select.options[i] = new Option( string[0], string[1] );
   }
 }
}
 
function getHTTPObject() {
 var req;
 try {
   if (window.XMLHttpRequest) {
   req = new XMLHttpRequest();
	 if (req.readyState == null) {
		 req.readyState = 1;
		 req.addEventListener("load", function () {
										  req.readyState = 4;
										  if (typeof req.onReadyStateChange == "function") req.onReadyStateChange();
				   }, false);
	 }  
	 return req;
   } 
   if (window.ActiveXObject) {
	 var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	 for (var i = 0; i < prefixes.length; i++) {
		try {
			req = new ActiveXObject(prefixes[i] + ".XmlHttp");
			return req;  
		} catch (ex) {};
	 }
   }
 } catch (ex) {}
 alert("XmlHttp Objects not supported by client browser");
}
var http = getHTTPObject();

Função para executar o listaDados sem clicar na combo box

function limpaCampos(formL){
	var formId = document.getElementById(formL);
	var elementoForm = formId.elements;
   
	for(var i = 0; i < elementoForm.length; i++){
		var tmpElement = elementoForm[i];
 
		if(tmpElement != undefined){
		 var tmpChange = tmpElement.getAttribute("onChange");
			 if(tmpElement.type == 'checkbox'){
				tmpElement.checked = false;
			 }else if(tmpElement.type != 'hidden' && tmpElement.type != 'button' && tmpElement.type != 'submit' && tmpElement.name != 'search'){
				tmpElement.value = '';
			 }
			 if(tmpChange != null && tmpChange != undefined){
			  eval(tmpChange);
			 }
		}
	}
}

Agradeço desde já a atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou quase certo que o problema esteja aqui:

 

var tmpChange = tmpElement.getAttribute("onChange");

 

Verifique o valor de tmpChange.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou quase certo que o problema esteja aqui:

 

var tmpChange = tmpElement.getAttribute("onChange");

 

Verifique o valor de tmpChange.

Primeiramente vou agradecer sua atenção. Obrigado por responder minha duvida.

 

Abaixo vão os valores do tmpChange em ambos os navegadores IE7 e FF.

 

Valor do tmpChange no IE7

function anonymous()
{
listaDados('form1','produto1', this.value)
}

Valor do tmpChange no FF

listaDados('form1','produto1', this.value)

E agora amigo klaygomes oque eu faço?

 

Grato novamente pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, mais alguém sabe como resolver o meu problema? Estou respondendo este tópico novamente na esperança de que alguém

possa me dar uma luz pois estou precisando muito de uma solução como esta.

 

Mais uma vez grato pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia amigos do fórum.

 

Consegui resolver o meu problema.

Abaixo vai o trecho de código para substituir e resolver o problema no ie

 

Código Antigo

if(tmpChange != null && tmpChange != undefined){
			  eval(tmpChange);
			 }

Código Corrigido

if(tmpChange != null && tmpChange != undefined){
			  rpTmpChange = ''+tmpChange;
			  replaces = rpTmpChange.replace('function anonymous()','');
			  replaces2 = replaces.replace('{','');
			  ieTmpChange = replaces2.replace('}','');
			  eval(ieTmpChange);
			 }

Como não entendo muito de javascript essa foi a solução mais simples que encontrei para resolver o problema.

 

Mais uma vez obrigado pela atenção de todos.

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.