我正在尝试将值传递给全局变量。这是初始化shdivs()的地方:
<select id="currentq" onchange="shdivs();">
getElementById('currentq')得到div ids。这个想法是,当选择框发生变化时,隐藏旧的div,显示新的div。但是,我希望显示的div的警报更改(qwe更改),但“旧”var不会更改。因此,当我从列表中选择不同的东西时,我得到的结论是:
警告:SMT警报:AUS再次选择
警告:SMT警报:美元
这意味着变量'old'不会更新。
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;
}
有人可以告诉我这是什么问题吗?
整个HTML / PHP / 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 :(得分:2)
对此最好的解释是以下两行之一失败。
document.getElementById(qwe).style.visibility="visible";
document.getElementById(old).style.visibility="hidden";
您是否可以验证您的选择引用的所有ID是否存在于DOM中?
将警报移动到函数末尾,并在再次运行时查看它是否会弹出。
修改强>
由于您发布了整个代码,我可以看到一个潜在的问题。
在编写DIV的代码中,您为两个元素分配了相同的id。 ID应该是唯一的:
...id="'.$rate["currency"].'"><input type="text" id="'.$rate["currency"].'" name="c'.$numb.'"...
<强>相依强>
小小的提示给你。如果您在onchange参数中传递this
,则您无需选择getElementById
:
function shdivs(objcurrentq) {
qwe=objcurrentq.value;