2015-05-17 2 views
1

Это последняя часть моих проблем для этого проекта. Я хочу «назначить» награду на основе общего балла (средний балл из трех судей). так что если бы счет был 0-30, это было бы золото, 30.1-60 это было бы высокое золото, и, наконец, 60.1-90 это было бы платиновым. когда нажата кнопка «Получить очки», я хочу, чтобы общий балл показывался (что он делает) и награда, назначенная для показа (золото, высокое золото, платина). Как я могу присвоить эту награду и показать ее? Я не уверен, как это кодировать. У меня есть основания операторов if, но я не уверен, что это сработает. Нужна помощь в выяснении того, как найти награду и показать ее награду. как общий счет рассчитывается и отображается. вот код:Использование оценки для присвоения награды в javascript

<!DOCTYPE html> 
<html> 
<body> 
<p align="right"> Dance Number: <input type="text"size="3"></p> 
<h1><ins>Judge 1</ins></h1> 
<form> 
<p> Technique: <input class="jd1" id="txt1" type="number"size="3" min="0" max="35">  /35</p> 
<p> Choreography: <input id="txt2" class="jd1" type="number"size="3" min="0" max="15"> /15</p> 
<p> Performance: <input id="txt3" class="jd1" type="number"size="3" min="0" max="25"> /25</p> 
<p> Precision: <input id="txt4" class="jd1" type="number"size="3" min="0" max="15"> /15</p> 
<p> Total Points: <input id="txt5"type="text"size="3"> /90</p> 
<p> Comments</p> 
<textarea name="commentsOne" cols="50" rows="5"> 
</textarea> 
</br> 
</form> 

<h1><ins>Judge 2</ins></h1> 
<form> 
<p> Technique: <input id="txt6" type="number" class="jd2" size="3" min="0" max="35"> /35</p> 
<p> Choreography: <input id="txt7" type="number" class="jd2" size="3" min="0" max="15"> /15</p> 
<p> Performance: <input id="txt8" type="number" class="jd2" size="3" min="0" max="25"> /25</p> 
<p> Precision: <input id="txt9" class="jd2" type="number" size="3" min="0" max="15"> /15</p> 
<p> Total Points: <input id="txt10"type="number"size="3"> /90</p> 
<p> Comments</p> 
<textarea name="commentsOne" cols="50" rows="5"> 
</textarea> 
</form> 

<h1><ins>Judge 3</ins></h1> 
<form> 
<p> Technique: <input id="txt11" class="jd3" type="number"size="3" min="0" max="35"> /35</p> 
<p> Choreography: <input id="txt12" type="number" class="jd3" size="3" min="0" max="15"> /15</p> 
<p> Performance: <input id="txt13" class="jd3" type="number" size="3" min="0" max="25"> /25</p> 
<p> Precision: <input id="txt14" type="number" size="3" class="jd3" min="0" max="15"> /15</p> 
<p> Total Points: <input id="txt15" type="number"size="3"> /90</p> 
<p> Comments</p> 
<textarea name="commentsOne" cols="50" rows="5"> 
</textarea> 
</form> 

<input type="button" onclick="sum()" onclick="award()" value="Get Score"> 
<p> Overall Score:<span id="avg"></span></p> 
<p> Award Assigned:<span id = "award"></span></p> 
</body> 
<script> 

    function getSum(className) { 
    var result = 0; 
    var classGroup = document.getElementsByClassName(className); 

    for(var i =0; i < classGroup.length; (i = i + 1)) 
    { 
    result += parseInt((classGroup[i].value || 0), 10); 
    } 

    return result; 

} 

function sum() { 

    var result1 = getSum('jd1'); 
    var result2 = getSum('jd2'); 
    var result3 = getSum('jd3'); 

    console.log('sum' + result1 + '' + result2 + '' + result3); 

    document.getElementById('txt5').value = result1; 
    document.getElementById('txt10').value = result2; 
    document.getElementById('txt15').value = result3; 


    document.getElementById('avg').innerHTML = (result1 + result2 + result3)/3; 
} 

function award(){ 

document.getElementById('avg').value = x; 

if(x = 0, x++, x < 30.1) 
    { 

    } 

if(x = 0, x++, x < 60.1) 
    { 

    } 

if(x = 0, x++, x < 91) 
    { 

    } 
} 

</script> 
</html> 
+0

Что вы думаете 'if (x = 0, x ++, x <30.1)' делает? – Nit

ответ

1
var award = ['Gold','High Gold','Platinum'][ ((score - 0.1)/30) | 0 ]; 

Мне просто интересно, если это может быть сделано в одной строке кода, не все те, если заявления ... и ответ - да. Вышеуказанная строка возвращает правильную награду за оценки от 0 до 91.

Интересной частью здесь является побитовый оператор «оценка | 0». Это работает как Math.floor() для положительных чисел и Math.ceil() для отрицательных чисел. И это именно то, что необходимо в этом случае для вычисления индекса массива.

Ну, мы все знаем, что мы не используем трюки в производственном коде, если только целью является заставить других программистов вас ненавидеть. Тем не менее, это классно.

обновление:

В ответ на комментарий, замените эту строку:

document.getElementById('avg').innerHTML = (result1 + result2 + result3)/3; 

с этими линиями:

var score = (result1 + result2 + result3)/3; 
document.getElementById('avg').innerHTML = score; 
document.getElementById('award').innerHTML = ['Gold','High Gold','Platinum'][ ((score - 0.1)/30) | 0 ]; 

Опять же, я не поощрять использование трюков как это в производственном коде - lol.

+0

Это замечательно! Как я могу напечатать награду в области, отмеченной наградой. как я сделал для общего балла. Я попробовал document.getElementById ('award'). InnerHTML = award; , но он, похоже, не работает ... любые предложения? – retrogirl19

+0

Когда я это сделал, он работал, но мои суммы для судей перепутались. – retrogirl19

+0

Я просто попробовал его с кодом с вашего поста и, похоже, работал нормально. Единственное, что явно неправильно, это то, что ваша кнопка «Получить счет» имеет 2 метода onclick. Удалите второй, который называет награды. Следующим шагом будет просмотр функции getSum() в отладчике или печать на консоли. – Roberto

0

Как вы указали, вы ошибаетесь, если инструкция с циклом for. Также вам нужно назначить значение элемента x вместо наоборот. Вы можете попробовать:

function award(){ 
    var x = document.getElementById('avg').value ; 
    var awardname=''; 
    if(x < 30.1) 
     { 
      awardname='gold'; 
     } 

    if(x < 60.1) 
     { 
      awardname='high gold'; 
     } 

    if(x < 91) 
     { 
      awardname='platinum'; 
     } 

    document.getElementById('award').value = awardname; 
    } 
1

Если вы измените если заявления на что-то больше, как это должно работать:

if(x < 30.1) 
{ 

} 
else if(x < 60.1) 
{ 

} 
else if(x < 91) 
{ 

} 

Код if(x = 0, x++, x < 30.1) приведет только к ошибке.

+0

Что я помещаю в фигурные скобки? подобный: if (x <30.1) { высокое золото; } else if (x <60.1) { золото; } прочее if (x <91) { платина; } } также как я могу его показать рядом с назначенной наградой под «общей оценкой» внизу, когда я нажму кнопку «Получить счет» ??? – retrogirl19

1

Кажется, вы ошибаетесь if с loops. Все, что внутри if должно либо вернуть true, либо false (то есть условие).

Редакцией:

Я изменил последние несколько строк вашего sum(), вы делаете вызов award() проходящее счет;

function sum() { 
    //your code 
    var score = (result1 + result2 + result3)/3; 
    document.getElementById('avg').innerHTML = score; 

    award(score); 
} 

И тогда ваша функция награды:

function award(x) { 
    var aw = document.getElementById('award'); 

    if (x > 0 && x < 30.1) 
     aw.innerHTML = 'Gold'; 
    else if (x < 60.1) 
     aw.innerHTML = 'High Gold'; 
    else if (x < 91) 
     aw.innerHTML = 'Platinum'; 
} 

jsfiddle DEMO

+0

, где золото, высокое золото и платина, просто положили бы это? Я все еще борется за то, как получить то, что вышло, как общий балл – retrogirl19

+0

Я отредактировал ответ. – Samurai

Смежные вопросы