2010-11-09 7 views
2

J'essaie de transmettre une valeur à une variable globale. C'est là shdivs() est initialisés:javascript variable globale

<select id="currentq" onchange="shdivs();"> 

getElementById ('currentq') obtient div ids. L'idée est que quand il y a un changement dans la boîte de sélection, l'ancienne div est cachée, une nouvelle est montrée. Cependant, les alertes changent pour la div que je veux afficher (qwe change de manière appropriée), mais l'ancienne var n'est pas modifiée. Alors, quand je sélectionne des choses différentes dans la liste que je reçois des choses comme:

alerte: alerte SMT: AUS Sélectionnez à nouveau
alerte: alerte SMT: USD

Ce qui signifie que les « anciens » variables est pas à jour.

old="SMT"; 
    function shdivs() { 
     alert(old); 
     qwe=document.getElementById('currentq').value; 
     alert(qwe); 
     document.getElementById(qwe).style.visibility="visible"; 
     document.getElementById(old).style.visibility="hidden"; 
     old=qwe; 
    } 

Quelqu'un peut-il me dire quel est le problème?

Tout HTML/PHP/code JavaScript:

<? 
echo '<script language="JavaScript"> 
<!-- 
    var rate = new Array(1,'; 
    $rows = simplexml_load_file('cron/ecbrates.xml'); 
    foreach($rows->Cube->Cube->Cube as $rate){ 
     if ($rate["currency"]=="BGN") echo $rate["rate"].','; 
    } 
     foreach($rows->Cube->Cube->Cube as $rate){ 
     if ($rate["currency"]=="USD") echo $rate["rate"].','; 
    } 
     foreach($rows->Cube->Cube->Cube as $rate){ 
     if ($rate["currency"]=="GBP") echo $rate["rate"].','; 
    } 
     foreach($rows->Cube->Cube->Cube as $rate){ 
     if ($rate["currency"]<>"BGN" && $rate["currency"]<>"USD" && $rate["currency"]<>"GBP") 
      if($rate["currency"]=="ZAR") echo $rate["rate"]; 
      else echo $rate["rate"].','; 
    } 
    echo '); 
    function currency_convert(origin) { 
     var origin_value = eval(\'document.currency.c\'+origin+\'.value\'); 
     var euro_equivalent = rate[origin]; 
     var v; 
     for (i=0; i<rate.length; i++) { 
      if (i!=origin) { 
       v = Math.round(rate[i]*origin_value/euro_equivalent*10000)/10000; 
       eval(\'document.currency.c\'+i+\'.value = \'+v); 
      } 
     } 
     return true; 
    } 
// --> 
</script>'; 
?> 
<div style="position:relative;"> 
<form name="currency"> 
<table cellspacing="0" cellpadding="0" border="1" bordercolor="#336699"> 
<tr><tr> 
<td><img src="flags/eur.jpg" alt="Europe" width="30" height="20"></td> 
<td>EUR</td> 
<td><input type="text" name="c0" value="" size="10" onKeyUp="currency_convert(0);"></td></tr><tr> 
<td><img src="flags/bgn.gif" alt="USA" width="30" height="20"></td> 
<td>BGN</td> 
<td><input type="text" name="c1" value="" size="10" onKeyUp="currency_convert(1);"></td></tr><tr> 
<td><img src="flags/usd.gif" alt="Austria" width="30" height="20"></td> 
<td>USD</td> 
<td><input type="text" name="c2" value="" size="10" onKeyUp="currency_convert(2);"></td></tr><tr> 
<td><img src="flags/gbp.gif" alt="Belgium" width="30" height="20"></td> 
<td>GBP</td> 
<td><input type="text" name="c3" value="" size="10" onKeyUp="currency_convert(3);"></td></tr><tr> 
<td colspan="2"> 
<select id="currentq" onchange="shdivs();"> 
<? 
foreach($rows->Cube->Cube->Cube as $rate){ 
    if ($rate["currency"]<>"BGN" && $rate["currency"]<>"USD" && $rate["currency"]<>"GBP") { 
     echo '<option value="'.$rate['currency'].'">'.$rate['currency'].'</option>'; 
    } 
} 
?> 
</select> 
</td> 
<td> 
<? 
$numb=4; 
foreach($rows->Cube->Cube->Cube as $rate){ 
    if ($rate["currency"]<>"BGN" && $rate["currency"]<>"USD" && $rate["currency"]<>"GBP") { 
     echo '<div style="position:absolute; top:99px; visibility:hidden;" id="'.$rate["currency"].'"><input type="text" id="'.$rate["currency"].'" name="c'.$numb.'" value="" size="10" onKeyUp="currency_convert(4);"></div>'; 
     $numb++; 
    } 
} 
?> 

    </td> 
</tr></table> 
</form> 
</div> 
<script type="text/javascript"> 
    old="SMT"; 
    function shdivs() { 
     alert(old); 
     qwe=document.getElementById('currentq').value; 
     alert(qwe); 
     document.getElementById(qwe).style.visibility="visible"; 
     document.getElementById(old).style.visibility="hidden"; 
     old=qwe; 
    } 
    </script> 
+0

Etes-vous sûr que vous n'êtes pas obtenir une autre erreur encore votre script? – Paddy

+0

Fonctionne pour moi: http://jsbin.com/akode5. Vous obtiendrez une exception si getElementById renvoie null, et dans un autre cas. – Kobi

+0

J'ai mis à jour avec le code entier – DreamWave

Répondre

2

Le meilleur pour cette explication possible est que l'une des deux lignes suivantes sont défaillantes. Pouvez-vous vérifier que tous les ID référencés par votre select existent dans le DOM?

Déplacez l'alerte jusqu'à la fin de la fonction et vérifiez si elle s'affiche à nouveau lorsque vous l'exécutez à nouveau.

EDIT

Depuis que vous avez publié le code entier, je peux voir un problème potentiel.

Dans le code qui écrit le DIV, vous avez assigné le même ID à deux éléments. Un ID doit être unique:

...id="'.$rate["currency"].'"><input type="text" id="'.$rate["currency"].'" name="c'.$numb.'"... 

Aucun lien

petit conseil pour vous. Si vous passez this dans les paramètres de onChange, vous n'avez pas getElementById sur la sélection:

function shdivs(objcurrentq) { 
    qwe=objcurrentq.value; 
+0

vous avez ACED! Merci! – DreamWave