Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

jcfr

Actualizar select box sem fazer refresh à página

Mensagens Recomendadas

jcfr

Boa tarde a todos,

Sou programador a pouco tempo e sempre utilizei javascript para actualizar os meus selectcs, no entanto no trabalho que estou a desenvolver isto tem de funcionar no IE8 e a forma como eu fazia não funciona no IE8.

Alguém conhece alguma forma seja em Javascript ou não de actualizar os valores de uma select box sem carregar a página novamente?

Desde já óbrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

<select id="x_bcdireito" name="x_bcdireito" onchange="
var obj =frmencomenda.x_powerdireito;
		 if (obj == null) return;
		 if (obj.options == null) return;
		 while (obj.options.length > 0) {
			 //alert(obj.options.length);
			 obj.remove(0);
		 }
		 var elSel=frmencomenda.x_powerdireito;
		 var elOptNew='';
		 var valor='';
		 var num=0;
		 for(var i=0;i<potencias_esfericas.length;i++){
			 if(potencias_esfericas[i][0]==this.value){
				 elSel=frmencomenda.x_powerdireito;
				 elOptNew=document.createElement('option');
				 //alert(potencias_esfericas[i][1]);
				 if((potencias_esfericas[i][1]*1)>0){
					 valor='+'+potencias_esfericas[i][1];
				 }else{
					 valor=potencias_esfericas[i][1];
				 }

				 elSel.options[num] = new Option(valor, valor);

					 num=num+1;
			 }

		 } " style="width:60px;">
 <?php
			 for($y=0;$y<$num_curva_base;$y++){

			 ?>
			 <option value="<?=$curvas_base[$y];?>" <?php if($y==0){$curva_base=$curvas_base[$y];?>selected="selected"<?php }?>><?=$curvas_base[$y];?></option>
			 <?php
			 }
			 ?>
		 </select>

<select id="x_diadireito" name="x_diadireito">
			 <?php
 for($y=0;$y<$num_diametro;$y++){
 ?>

			 <option value="<?=$diametros[$y];?>"><?=$diametros[$y];?></option>
			 <?php
 }
 ?>
		 </select>

é um projecto no qual entrei já quase terminado e como já tinha quase tudo directamente nos onchange's eu fiz igual embora prefira fazer em funções...

a primeira parte do código funciona bem e elimina todas as opções, a segunda em todos os browsers também e adiciona as novas opções guardadas no array, no entanto no IE8 isto não funciona...

Conhecem alguma forma de fazer isto que funcione em todos os browsers incluindo o IE da versao 8 para a frente incluindo a 8 e que não inclua carregar novamente a página?

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

Sim asm de qualquer forma isso não me resolve o problema, antes de o passar para o onchange tinha em funções

<script language="javascript" type="application/javascript">
function removeOptions(id) {
//alert(id);
var obj =document.getElementById(id);
if (obj == null) return;
if (obj.options == null) return;
while (obj.options.length > 0) {
 //alert(obj.options.length);
 obj.remove(0);
}
}
function addOptions(id, curva_base){
var elSel=document.getElementById(id);
var elOptNew=document.createElement('option');
var valor="";
for(var i=0;i<potencias_esfericas.length;i++){
 if(potencias_esfericas[i][0]==curva_base){
  elSel=document.getElementById(id);
  elOptNew=document.createElement('option');
  //alert(potencias_esfericas[i][1]);
  if((potencias_esfericas[i][1]*1)>0){
   valor='+'+potencias_esfericas[i][1];
  }else{
   valor=potencias_esfericas[i][1];
  }
    elOptNew.text = valor;
    elOptNew.value = valor;

    try {
   elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
    }
    catch(ex) {
   elSel.add(elOptNew); // IE only
    }
 }

}
}
function actPotencia(id_curva_base, id_potencia_esferica){
removeOptions(id_potencia_esferica);
var curva_base=document.getElementById(id_curva_base).value;
addOptions(id_potencia_esferica, curva_base);

}
</script>

<select id="x_bcdireito" name="x_bcdireito" onchange="actPotencia('x_bcdireito', 'x_powerdireito'); " style="width:60px;">
    <?php
     for($y=0;$y<$num_curva_base;$y++){
     ?>
     <option value="<?=$curvas_base[$y];?>" <?php if($y==0){$curva_base=$curvas_base[$y];?>selected="selected"<?php }?>><?=$curvas_base[$y];?></option>
    <?php
    }
    ?>
    </select>

<select id="x_powerdireito" name="x_powerdireito" style="width:60px;">
    <?php
     for($y=0;$y<$i_list;$y++){
           if($potencias_esfericas[$y]['curva_base']==$curva_base){
     ?>
      <option value="<?=$potencias_esfericas[$y]['potencia_esferica'];?>"><?=$potencias_esfericas[$y]['potencia_esferica'];?></option>
      <?php
          }
      }

</select>

Funciona no IE9+ , Chrome, Firefox, Safari, Opera etc mas no IE8 e anteriores não funciona, e eu tenho de ter isto a funcionar no IE8 e mais recentes...

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.