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>
Etes-vous sûr que vous n'êtes pas obtenir une autre erreur encore votre script? – Paddy
Fonctionne pour moi: http://jsbin.com/akode5. Vous obtiendrez une exception si getElementById renvoie null, et dans un autre cas. – Kobi
J'ai mis à jour avec le code entier – DreamWave