2015-03-26 2 views
1

В следующем коде, мой alert() возвращает , когда он должен возвращать значение флажка. Мне нужно, чтобы оно возвращало значение в назначенном массиве, связанном с этим флажком.Почему моя функция JavaScript не возвращает значение проверенного массива?

<!DOCTYPE html> 
<html> 
<head> <title> Program 4 Parallel Arrays </title> 
<style type="text/css"></style> 

<script type="text/javascript"> 
    var priceArray = [45.25, 24.88, 32.35, 27.33, 
         34.85, 36.24, 85.33, 45.32]; 
    var pageArray = [1098, 536, 500, 792, 912, 1224, 899, 504]; 

    function funRun() {  
     var totalPages = 0;   
     for(i=0; i<document.bookForm.books[i].length; i++) { 
      if(document.bookForm.books[i].checked == true) { 
       totalPages = totalPages + pageArray[i]; 
      } 
     } 
     alert("totalPages : " + totalPages);  
    } 

    function funRun1() { 
     var subTotal = 0;   
     for(i=0; i<document.bookForm.books[i].length; i++) { 
      if(document.bookForm.books[i].checked == true) { 
       subTotal = subTotal + priceArray[i]; 
      } 
     } 
     alert("subTotal : " + subTotal);  
    } 

    tax = (.06 * subTotal) 
    total= (subTotal + tax) 
</script> 
</head> 
<body> 

<form name="bookForm"> 
    <input type="checkbox" name="books" value="Flanagan" /> 
     JavaScript, the Definitive Guide: $45.25 <br> 
    <input type="checkbox" name="books" value="McFarland" /> 
     JavaScript & JQuery: The Missing Manual: $24.88 <br> 
    <input type="checkbox" name="books" value="Morrison" /> 
     Head First JavaScript: $32.35 <br> 
    <input type="checkbox" name="books" value="Wilton&McPeak" /> 
     Beginning JavaScript: $27.33 <br> 
    <input type="checkbox" name="books" value="Quigley" /> 
     JavaScript by Example: $34.85 <br> 
    <input type="checkbox" name="books" value="Goodman" /> 
     JavaScript Bible: $36.24 <br> 
    <input type="checkbox" name="books" value="Gosselin" /> 
     JavaScript: The Web Technologies Series: $85.33 <br> 
    <input type="checkbox" name="books" value="Suehring" /> 
     JavaScript Step by Step: $45.32 <br> 
    <br> 
    <input type="button" 
     value="Calculate Total" 
      onclick="funRun();funRun1()"/> 

     <input type="reset"/> 
    <br> 
    <br> 
    <input type="text" name="totalPages"/>Total Pages<br> 
    <input type="text" name="subTotal"/>Subtotal<br> 
    <input type="text" name="tax"/>Tax<br> 
    <input type="text" name="total"/>Total</p> 

</body> 
</html> 

ответ

2

Вопрос находится на вашем for loop.

Использование:

for(i=0; i<document.bookForm.books.length; i++) { 

Вместо:

for(i=0; i<document.bookForm.books[i].length; i++) { 

Причина заключается в том, что вы не должны получить доступ к элементу массива при определении размера.

Кроме того, следующий блок возвращается в ReferenceError с переменной subTotal не был определен из функции funRun1():

tax = (.06 * subTotal) 
total= (subTotal + tax) 
+0

Большое вам спасибо за помощь! –

0

Я хотел бы изменить ваш funRun() к этому

function funRun() {  
    var inputs = document.forms[0].querySelectorAll('[name=books]'); 

    var totalPages = 0;   

    for(i=0; i<inputs.length; i++) { 
     if(inputs[i].checked) { 
      totalPages = totalPages + pageArray[i]; 
     } 
    } 

    alert("totalPages : " + totalPages);  
} 

Применить то же самое с funRun1(), и со мной все будет в порядке.

Кроме того, возникает ошибка в консоли из-за этого

tax = (.06 * subTotal) 
total= (subTotal + tax) 

Причина в том, что ваш subTotal сфера только в funRun1()

Я бы даже предложить положить скрипт непосредственно перед </body>

0

Проблема в том, что при индексировании с i внутри цикла for в это время 0, что означает, что ваш цикл не будет именоваться вообще. Поэтому Изменение:

for(i=0; i<document.bookForm.books[i].length; i++) { 

if(document.bookForm.books[i].checked == true) { 
     totalPages = totalPages + pageArray[i]; 
} 
} 

To:

for(i=0; i<document.bookForm.books.length; i++) { 

if(document.bookForm.books[i].checked == true) { 
     totalPages = totalPages + pageArray[i]; 
} 
} 

и изменение

for(i=0; i<document.bookForm.books[i].length; i++) { 

if(document.bookForm.books[i].checked == true) { 
     subTotal = subTotal + priceArray[i]; 
} 
} 

To:

for(i=0; i<document.bookForm.books.length; i++) { 

if(document.bookForm.books[i].checked == true) { 
     subTotal = subTotal + priceArray[i]; 
} 
} 

Кроме того, здесь работает JS Fiddle для вас , https://jsfiddle.net/Kitchenfinks/5ovkdh2c/

Счастливое кодирование!

+0

Изменение переменной на твердое значение не является хорошим советом. Если его формы будут уменьшены, код сломается. Поэтому я предложил 'document.bookForm.books.length' вместо' 8'. – Zanon

+0

А, ты прав. Ваше предложение намного лучше. Я исправлю свой стиль и не буду давать плохие советы в будущем. Спасибо! –

0

помимо изменений, предложенных Zanon, возьмите эти две строки внутри функции funrun1() -

tax = (.06 * subTotal) 
total= (subTotal + tax) 

Кроме того, я хотел бы предложить вам позвонить funrun1() внутри funrun() OnClick событие из кнопка.

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