2013-06-12 5 views
1

Почему это не работает? Аналогичный код работает здесь: http://www.ralphphillips.com/youtube/stick-figure/stick-figure2.htmlПочему эта простая функция не работает

Но это не работает. У меня правильный код html. Идентификаторы установлены, но разные идентификаторы для каждого. Он даже не дает выход 0, чтобы указать, что сумма равна 0. Значения не отображаются.

<!-----SAMPLE INPUT ----> 
<input type="radio" autocomplete="off" id="pack11049" name="radio-73" value="1"  
onkeyup="updateTotal()"> 


<script language="javascript"> 
function updateTotal() { 

var optionsPrice = 0; 
var accompPrice = 0; 

function checkOptions() {  
if (document.getElementById('pack11049').checked) { 
    optionsPrice += 1049; 
    } 

if (document.getElementById('pack21199').checked) { 
    optionsPrice += 1199; 
    } 

if (document.getElementById('pack31199').checked) { 
    optionsPrice += 1199; 
    } 

if (document.getElementById('pack41299').checked) { 
    optionsPrice += 1299; 
    } 
if (document.getElementById('pack61499').checked) { 
    optionsPrice += 1499; 
    } 
if (document.getElementById('pack71549').checked) { 
    optionsPrice += 1549; 
    } 
if (document.getElementById('pack81699').checked) { 
    optionsPrice += 1699; 
    } 
if (document.getElementById('pack91799').checked) { 
    optionsPrice += 1799; 
    } 
if (document.getElementById('pack101999').checked) { 
    optionsPrice += 1999; 
    } 
if (document.getElementById('pack112499').checked) { 
    optionsPrice += 2499; 
    } 
if (document.getElementById('pack122549').checked) { 
    optionsPrice += 2549; 
    } 
} // end of checking for Package 


function checkAccomp() { 

if (document.getElementById('howmany').value == '1') { 
    accompPrice += 129; 
    } 

if (document.getElementById('howmany').value == '2') { 
    accompPrice += 258; 
    } 

if (document.getElementById('howmany').value == '3') { 
    accompPrice += 1057; 
    } 

if (document.getElementById('howmany').value == '4') { 
    accompPrice += 1856; 
    } 

} // end of check accomp function 

checkPackage(); 
checkAccomp(); 

var totalPrice = optionsPrice + accompPrice; 
document.getElementById('optionsPrice').innerHTML = "$ " + optionsPrice; 
document.getElementById('accompPrice').innerHTML = "$ " + accompPrice; 
document.getElementById('totalPrice').innerHTML = "$ " + totalPrice; 


} // end of my main update total function 
</script> 
+0

checkOptions и checkAccomp определены в updateTotal для начала – Niall

+1

Как он не работает? Что происходит? Чего вы ожидали? –

+2

Вы действительно хотели использовать событие onkeyup? –

ответ

3

Я бы переписать checkOptions и checkAccomp функции и удалить все эти if заявления, используя этот шаблон: создать объект, который хранит идентификатор каждого checkbox и его соответствующую цену, а затем используйте цикл for-in с поиском ключевого значения, например:

var OptionPricing = {  

    'pack11049': 1049, 
    'pack21199': 1199, 
    'pack31199': 1199, 
    'pack41299': 1299, 
    'pack61499': 1499 
}; 

var AccompPricing = { 

    0: 0, 
    1: 129, 
    2: 258, 
    3: 1057, 
    4: 1856 
}; 

function checkOptions() { 

    var Price = 0; 

    for (Packs in OptionPricing) { 

     if ($('#' + Packs).is(':checked')) {   
      Price += OptionPricing[Packs]; 
     } 
    } 

    return Price; 
} 

function checkAccomp() { 

    var Accomp = parseInt($('#HowMany').val(), 10); 

    return AccompPricing[Accomp]; 
} 

function updateTotal() { 

    var ThePrice = checkOptions() + checkAccomp(); 

    $('#TotalPrice').text(ThePrice); 
} 

$(function() { $('.DoPricing').click(updateTotal); }); 

Работает jsFiddle. Я не добавлял все идентификаторы и соответствующие цены в объект OptionPricing, но вы получили эту идею. Кроме того, если изменения цен или добавлены новые цены, этот шаблон должен быть проще поддерживать, не говоря уже о том, что код значительно сокращен до нескольких строк (и даже может быть немного уменьшен, если вам нужен краткий синтаксис). Я использовал jQuery (у вас был тег в вопросе), но вы можете легко изменить его и использовать простые js, если это необходимо.

+0

Это больше того, что мне нужно, потому что значение должно быть уникальным, поэтому я могу идентифицировать пакет на странице обработки php. У меня будет более одного, у которого есть такая же цена. Это работает как шарм! Спасибо! –

+0

Это странно, я воссоздал весь скрипт, который вы предоставили, и он отлично работает на jsFiddle, но когда вы выбираете что-то на странице, он говорит, что сумма «NaN» не кавычки, просто NaN .... любые предложения? –

+0

Когда я говорю «Пейдж», я имею в виду файл mypresspress page.php. –

1

Я хотел бы попробовать это http://jsfiddle.net/EFWf5/1:

$("form#order :input[type=radio]").each(function(){ 
    $(this).bind('change', function() { 
     checkOptions(); 
    }); 
}); 

var checkOptions = function() { 
    var total = 0; 
    var pack = parseInt($('input[name=pack]:checked', '#order').val()); 
    var accomp = parseInt($('input[name=accomp]:checked', '#order').val()); 
    if (!isNaN(pack)) total += pack; 
    if (!isNaN(accomp)) total += accomp; 
    $('#total').text(total); 
    $('#title').text($('input[name=pack]:checked', '#order').attr('title')); 
}; 
<form id="order"> 
    <div class="col"> 
     <strong>Package</strong><br /><hr /> 
     <input type="radio" name="pack" value="1049" />Pack 1<br /> 
     <input type="radio" name="pack" value="1199" title="MVP Package"/>Pack 2<br /> 
     <input type="radio" name="pack" value="1199" title="Oceanview" />Pack 3<br /> 
     <input type="radio" name="pack" value="1299" />Pack 4<br /> 
     <input type="radio" name="pack" value="1499" />Pack 5</div> 
    <div class="col"> 
     <strong>Accomp</strong><br /><hr /> 
     <input type="radio" name="accomp" value="129" />1<br /> 
     <input type="radio" name="accomp" value="258" />2<br /> 
     <input type="radio" name="accomp" value="1057" />3<br /> 
     <input type="radio" name="accomp" value="1856" />4 
    </div> 
</form> 
<div class="clear"></div> 
<hr id="bar" /> 
<div class="clear"></div> 
<div> 
    <div class="col"> 
     <strong>Total: </strong><span id="total">0</span> 
    </div> 
    <div class="col" style="width:200px"> 
     <strong>Title: </strong><span id="title"></span> 
    </div> 
</div> 
+0

Отлично работает! это! Спасибо! –

+0

Хорошо, вот 1 вопрос, который у меня есть с этим javascript. Он отлично работает, но у меня не может быть того же значения на любом из переключателей, потому что будет больше одного с той же ценой и Я использую значение для идентификации каждого пакета, поэтому я могу переписать цену на странице обработки. Другими словами, если (Pack == 1, тогда пакет 1 = 1099 & pack title = MVP Package Price $ 1099) if (pack == 2 затем pack = 1099 & pack title = Oceanview Price $ 1099) –

+0

Как я могу определить между пакетами, если 1099 является единственным индикатором? –

1

Я могу заявить очевидное здесь, но в первой функции (updateTotal) отсутствует закрывающая скобка. Если вы скопировали и вставили из своего источника, это может быть вашей проблемой. Легко упускать из виду, когда вы смотрите на него ;-)

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