2012-08-14 95 views
0

我一直在研究一些Javascript代碼來對HTML表格執行一些數學運算。它首先計算一行的平均值,然後從菜單中計算具有相同選擇的所有行的平均值的總和。獲取NaN而不是值

平均計算工作正常,但我打破了與平均總數的東西。我設置一個樣品的jsfiddle:

http://jsfiddle.net/fmdataweb/c4gJU/3/

如果選擇「溫和」從菜單中的風險,並表示小時每星期周,每年它會計算平均輸入一些數字,但它然後應該將平均值放入中等細胞總數中。如果將菜單選項更改爲「高」,則相同。

欣賞是否有人能指出我要去哪裏錯 - 我是一個Javascript新手在這個階段。

回答

5

選擇器$('#lastYear tr:has(.risk)').eq(i).find('td:last input')與任何元素都不匹配。

TEST

如果您插入行alert($('#lastYear tr:has(.risk)').eq(i).find('td:last input').length)var qty = parseFloat(...)下方彈出窗口將顯示0

EDIT

var qty = parseFloat($('#lastYear tr:has(.risk)').eq(i).find('td:last').prev().find('input').val()); 

正如@Diego指出的那樣,原來的代碼匹配具有按鈕,而不是一個input的細胞。上面的代碼在最後一個之前選擇單元格,然後獲取其輸入。不過,我建議你使用自定義類或ID來讓你的選擇更短,更容易閱讀。

+0

嗨,謝謝你。我不確定這裏的問題是什麼,或者我需要做什麼來解決它,也就是說爲什麼它不匹配任何元素? – user982124 2012-08-14 13:29:42

+1

它不匹配任何元素,因爲最後一個TD不包含輸入字段,而是一個錨點。 – Diego 2012-08-14 13:34:46

+0

更具體地說,'td:last'會匹配以下元素,在你的情況下:'td class =「button mt5」>Add another activity',它位於包含輸入字段的TD之後。因此,你看的TD不是最後一個,而是倒數第二。我強烈建議簡化你的選擇器併爲這些元素使用標識符,而不是按位置查看(這很少是件好事)。 – Diego 2012-08-14 13:37:01

相關問題