-1

Привет это мой код и HTML в jsfiddle ...GetElementBy ... FAIL - где ошибка?

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(); 
} 

Когда я вычислить значение Silver, нажав кнопку "btnGetTotalsSilver" сценарий показать результат, получив значение «option», но не соответствует правильному, он получит значение поля выбора золота:

это: (document.getElements ByTagName ("вариант") [чарати] .value))

не так: (document.getElementsByTagName ("вариант") [millesimi] .value))

почему?

благодаря

+0

Почему вы используете как ванильные методы JS, так и jQuery? – Sirko

+0

О чем ты говоришь? – MIOII

+0

Вы используете '$ ('selector')' много раз, а также 'document.getElementById()'. Я бы рекомендовал быть более последовательным в вашем коде. – Sirko

ответ

0

В функции мыши для btnGetTotalsSilver, millesimi просто номер. Когда пользователь выбирает самую верхнюю опцию в выборе, millesimi становится 0, больше ничего. Таким образом, он не является неотъемлемо связанным с этим конкретным элементом выбора, который имеет «millesimi» для id!

Итак, когда вы сделаете document.getElementsByTagName("option") через некоторое время, вы получите массив все варианты на странице. Этот массив начинается с самого первого (который находится в первом select). Поэтому индексирование с [millesimi] (если millesimi равно 0) возвращает первый вариант в первом выборе.

Решение: выберите только подходящие варианты.
Использование document.getElementById('millesimi').getElementsByTagName("option")
(или его эквивалент JQuery.)

См new fiddle.

Редактировать: О, конечно, вы должны сделать то же самое для других избранных на странице, если у них есть похожие обработчики.

+0

о, да, мужчина! правильно это работает! большое вам спасибо ... как вы думаете, можно вставить переключатель валют? – MIOII