私はこのアプリケーションを現在の主要なブラウザすべてでテストしており、信頼性が高く正しく動作します。アプリがデプロイされました。結果がNaNになることがあるという報告があります。Javascript parseFloat()はNaNを返すことがあります - 古いバージョンのFirefoxの場合
以下の関数は、parsefloat()を使用してテーブル内の価格列の合計を求めます。その合計がNaNとして表示されることがあります。私はそれを再現することができず、これまでに問題を報告している顧客は、彼らがどのブラウザを使用しているかを私に教えるのに技術的に十分な能力がありませんでした。ある人がMac上でFirefoxのスクリーンショットを送ったが、もう1人はWindows上でFirefoxだった。以下のコードで
、この行:var linePrice = rows[i].cells[gTblLinePriceCol].innerHTML.substr(1);
が正しく6.50にlinePriceを設定し、innerHTMLプロパティの値が "$ 6.50" です。次の行はparseFloat(linePrice)を呼び出します。
最後に、この行:
document.getElementById('totalPrice').innerHTML = tableTotal.toLocaleString('us-US', { style: 'currency', currency: 'USD' });
はNaNではなく、列合計を表示させます。
ご協力いただければ幸いです!ここで
コードは次のとおりです。
function totalTbl()
{
var table = document.getElementById('myTbl');
var rows = table.getElementsByTagName('tr');
var tableTotal = 0;
// Skip the first (header) row and the last (add row) row
len = rows.length - 2;
numRows = len - 1;
for (var i = 1; i < len; i++)
{
var cell = rows[i].cells[5];
if (cell.firstChild != null)
{
var linePrice = rows[i].cells[gTblLinePriceCol].innerHTML.substr(1);
tableTotal += parseFloat(linePrice);
}
}
document.getElementById('totalPrice').innerHTML = tableTotal.toLocaleString('us-US', { style: 'currency', currency: 'USD' });
}
答えを入力しているうちに、問題が見つかりました。米国以外の顧客が提供するスクリーンショットをより注意深く見ると、彼の価格は「US $ 15」と表示されていました。00 "と評価していますが、ここで米国で行ったテストでは" $ 15.00 "の価格が表示されていましたが、toLocalStringに関する読者の意見では、ブラウザだけでなくブラウザのユーザーの場所によって結果が異なることがわかりました。 "$"を取り除くことを意図していた(1)は、このトリックをやっていませんでした。文字列の最初の桁を検索してから部分文字列を取るように変更しました。 –
あなたのコメントをお寄せいただきありがとうございます。 –
問題を解決してくれてうれしいですが、多くの問題を隠してしまうので、決して '=='を使わないことをお勧めします。残念なことに、JavaScriptは10日間で悪名高いものとなりました。さまざまなブラウザの機能の実装が異なる(これは悪名高いIEもあります)、避けるべき落とし穴がたくさんあります。私がお勧めする傾向JavaScript:The Good Parts'を読んでください。 – Jack