-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」をクリックしてシルバー値を計算すると、スクリプトは「オプション」値を取得する結果を表示しますが、正しい値と一致しません。ゴールド選択ボックスの値を取得します。

これ: (document.getElementsByTagName("option")[carati].value))

これではありません: (document.getElementsByTagName("option")[millesimi].value))

なぜ?

ありがとう

4

1 に答える 1

0

のクリック機能ではbtnGetTotalsSilver、ミレシミは単なる数字です。ユーザーが select の最上位のオプションを選択すると、millesimi は 0 になり、他には何もありません。そのため、id に「millesimi」が含まれている特定の select 要素とは本質的に関連していません!

したがって、しばらくすると、ページ内のすべてのオプションdocument.getElementsByTagName("option")の配列が得られます。この配列は、最初のもの (最初の にあります) から始まります。そのため、(millesimi が 0 の場合)でインデックスを作成すると、最初の選択で最初のオプションが返されます。select[millesimi]

解決策: 適切な選択からオプションのみを取得します。 (または同等のjQuery)
を使用してください。document.getElementById('millesimi').getElementsByTagName("option")

新しいフィドルを参照してください。

編集:ああ、もちろん、ページ上の他の選択にも同様のハンドラーがある場合は同じことを行う必要があります。

于 2013-09-17T13:09:32.350 に答える