Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.>
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.
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.
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.
Estou quase certo que o problema esteja aqui:
var tmpChange = tmpElement.getAttribute("onChange");
Verifique o valor de tmpChange.