代码之家  ›  专栏  ›  技术社区  ›  DreamWave

javascript全局变量

  •  2
  • DreamWave  · 技术社区  · 14 年前

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

    getElementById('currentq')获取div id。其思想是,当选择框中有更改时,将隐藏旧div,显示新div。但是,我想显示的div的警报会改变(qwe会相应地改变),但是“old”变量不会改变。因此,当我从列表中选择不同的内容时,我会得到如下信息:

    警报:SMT警报:AUS再次选择
    警报:SMT警报:美元

    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>
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Mutation Person    14 年前

    对此最好的解释是以下两行中的一行出现故障。

        document.getElementById(qwe).style.visibility="visible";
        document.getElementById(old).style.visibility="hidden";
    

    将警报移动到函数的末尾,并查看再次运行时是否弹出警报。

    编辑

    既然你发布了整个代码,我可以看到一个潜在的问题。

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

    无关的

    给你一点小费。如果你通过了 this getElementById 选择时:

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