-1

嗨,这是我在 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))

为什么?

谢谢

4

1 回答 1

0

在 click 函数中btnGetTotalsSilver,millesimi 只是一个数字。当用户在选择中选择最上面的选项时,millesimi 变为 0,仅此而已。因此,它与恰好具有“millesimi”作为 id 的特定选择元素没有内在联系!

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

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

新小提琴

编辑:哦,当然,如果页面上的其他选择具有相似的处理程序,您应该对它们执行相同的操作。

于 2013-09-17T13:09:32.350 回答