GetElementBy ...失败 - 哪里出错了?

时间:2013-09-17 09:02:38

标签: javascript html function getelementbyid getelementsbytagname

嗨,这是我的代码和jsfiddle中的html ......

http://jsfiddle.net/vp9V6/56/

这是.js:

    function itemManager(){
    var _me        = null;
    var _goldAsk   = 0;
    var _silverAsk = 0;
    var _eurusdAsk = 0;

    var construct = function(){
        //init here
        _me = $(this);
        _bindHandlers();
        _updateItem(125);
    }

    var _bindHandlers = function(){

        _me.on('stockupdated', function(){
            $('#gcost').text('Domanda oro: ' + (( _goldAsk / 31.1034768 ) / _eurusdAsk).toFixed(3) + ' Domanda argento: ' + (( _silverAsk / 31.1034768 ) / _eurusdAsk).toFixed(3) + ' Cambio €/$: ' + (_eurusdAsk).toFixed(3));
        });

        $('#calculate').on('click', function(){
            alert("item gold ask(" + _goldAsk + ") vs silver ask(" + _silverAsk + ")");
        });

        $('#updateitem').on('click', function(){
            _updateItem(250);
        });

       $('#btnGetTotalsGold').on('click', function(){
            var grammsOfGold   = $('#goldGramms').val().length   ? parseInt($('#goldGramms').val())   : 0;
            var carati = document.getElementById("carati").selectedIndex;

            $(".container-oro").text('Valutazione per ORO: ' + (((( _goldAsk / 31.1034768 ) / _eurusdAsk) * (document.getElementsByTagName("option")[carati].value)) * grammsOfGold ).toFixed(2) + ' Carati selezionati: ' + (document.getElementsByTagName("option")[carati].value))
        });        


    $('#btnGetTotalsSilver').on('click', function(){
            var grammsOfSilver = $('#silverGramms').val().length ? parseInt($('#silverGramms').val()) : 0;
            var millesimi = document.getElementById("millesimi").selectedIndex;

            $(".container-argento").text(' Valutazione per ARGENTO: ' + (((( _silverAsk / 31.1034768 ) / _eurusdAsk) * (document.getElementsByTagName("option")[millesimi].value)) * grammsOfSilver ).toFixed(2) + ' Titolo selezionato: ' + (document.getElementsByTagName("option")[millesimi].value))
        });        
    };


   var _updateItem = function(cost){
        $.ajax({
            type: 'POST',
            url: 'json.php',
            dataType: 'json',
            delay: 0,
            success: function(data){                
                _goldAsk   = parseFloat(data.GOLD.ask);
                _silverAsk = parseFloat(data.SILVER.ask);
                _eurusdAsk = parseFloat(data.EURUSD.ask);
                _me.trigger('stockupdated');
            }
        })
    }

    setInterval( _updateItem, 60000);
    construct();
}

window.onload = function(){
    var item = new itemManager();
}

当我单击“btnGetTotalsSilver”计算Silver值时,脚本会显示获得“option”值的结果但与右边的值不匹配,它会得到黄金选择框值:

  

这个:(document.getElementsByTagName(“option”)[carati] .value))

     

不是这个:(document.getElementsByTagName(“option”)[millesimi] .value))

为什么?

感谢

1 个答案:

答案 0 :(得分:0)

btnGetTotalsSilver的点击功能中,millesimi只是一个数字。当用户选择select中最顶层的选项时,millesimi变为0,没有别的。所以它与那个碰巧对于id有“millesimi”的特定选择元素没有内在联系!

因此,当您稍后执行document.getElementsByTagName("option")时,您会在页面中获得所有选项的数组。这个数组从第一个数组开始(在第一个select中)。因此,使用[millesimi]进行索引(如果millesimi为0)将返回第一个选择中的第一个选项。

解决方案:只从正确的选择中获取选项 使用document.getElementById('millesimi').getElementsByTagName("option")
(或其jQuery等价物。)

请参阅new fiddle

编辑:哦,当然,如果他们有类似的处理程序,你应该对页面上的其他选择做同样的事情。