私は、追加のプロパティと、select
要素の項目に対応する情報を含むJavasciptオブジェクトの配列を持っています。Javascriptオブジェクトのプロパティから正しくない値を返すJavascript
ユーザーがドロップダウンで要素を選択すると、要素がJavascript配列内に表示され、ページ上の他の2つのフィールドに、対応するJavasciptオブジェクトの関連する値が設定されます。ここで
がjsの関数である:<select onchange="pickedCode(this);" name="ctl00$ContentPlaceHolder1$lstCodes" id="ctl00_ContentPlaceHolder1_lstCodes">
<option value=""></option>
<option value="70">3-DAY NOTICE</option>
<option value="156">A-ABSOLUTE TRANSCRIPT</option>
<option value="47">ABORTED EVICTION</option>
<option value="204">ACCESS AGREEMENT</option>
<option value="174">ADD'L SERVES/MAILINGS</option>
<option value="124">AFF IN OPP - COMMERCIAL</option>
</select>
...と、ここでJavasciptデータの配列です:
function pickedCode(who) {
who = $(who);
var opt = who.find(':selected');
var val = opt.val();
for (lc = 0; lc < codes.length; lc++) {
var code = codes[lc];
if (code.Id == val) {
var amt = code.Dollars;
alert(code.Dollars)
$('input[field=amount]').val((amt > 0 ? amt : ''));
$('textarea[field=text]').val(code.Text);
break;
}
}
}
...ここでは関数を呼び出しているHTMLは次のようになります。
var codes = [{
"Id": 70,
"Code": "3-DAY NOTICE",
"Text": "Initiation of Non-Payment Proceeding.",
"Dollars": "46.20"
}, {
"Id": 156,
"Code": "A-ABSOLUTE TRANSCRIPT",
"Text": "A-ABSOLUTE TRANSCRIPT",
"Dollars": "0.00"
}, {
"Id": 47,
"Code": "ABORTED EVICTION",
"Text": "THE MARSHAL HAD TO ABORT TODAY'S SCHEDULED EVICTION AS ",
"Dollars": "0.00"
}, {
"Id": 204,
"Code": "ACCESS AGREEMENT",
"Text": "ACCESS AGREEMENT",
"Dollars": "0.00"
}, {
"Id": 174,
"Code": "ADD'L SERVES/MAILINGS",
"Text": "ADD'L MAILINGS",
"Dollars": "0.00"
}, {
"Id": 124,
"Code": "AFF IN OPP - COMMERCIAL",
"Text": "Aff in Opp - COMMERCIAL",
"Dollars": "85.05"
}
]
適切な要素を検索しています。
テキストを取得してテキストエリアに正しく設定しています。
問題はプロパティDollars
です。何らかの理由で、Dollars
プロパティの値が0より大きいアイテムであっても、常に"0.00"
の値が返されます。なぜなら、私の人生は理由を理解できません。もともと、それはAmount
と命名されました。私は予約語なのかもしれないと思ったので、Dollars
に変更しました。私はもともと文字列の代わりに実際の数値としてそれを持っていましたが、それと同じ問題が残っていました(それはいつも0
を返しました)。おそらくそれを変数に代入する際の問題だと思ったので、変数の代わりに実際のプロパティ自体に警告しました(警告はデバッグ用です)。
私も考えましたcode.Id == val
をチェックするときにタイプの問題でしたが、実際には適切なアイテムを見つけてプロパティテキストを取得しているため、それは問題にはなりません。
私はここで類似しているいくつかの他の質問を見つけましたが、それらはすべて、そのプロパティ自体が配列であり、ユーザがそのプロパティにインデックスを作成していないことに関連しているようです。鉱山は配列ではありませんが、個々のプロパティはまったくまっすぐな値です。
Firefox(57.0)とGoogle Chrome(62.0.3202.94)の両方でこれを試し、Opera(49.0.2725.47)でも試してみましたが、3つのブラウザすべてで同じ結果が得られました。
自分自身を真実に混乱させるだけで、私はFirefoxのクライアントサイドデバッガを実行し、何が起こるかを知ることに決めました。ページのソースを表示するとき、明らかに46.2の値を持っています:
しかし、関数をステップ実行して変数を見ると、配列からそのコードを引き出すときに値をロードしています0.00の値をメモリに格納します。 これで、メモリにロードされている値が実際のソースと一致しないため、私は何が起こっているのか完全に混乱しています。私は...とBAHを確実にするためにコードを検索しました!スクリーンショットを見ると、思考が始まり、わかりました。後世のための答えになる詳細。
[これはJSONではありません](http://benalman.com/news/2010/03/theres-no-suchthing-as-a-json/) – Quentin
http://jsbin.com/ vusiqupiru/edit?js、console - 私は問題を再現できません。 – Quentin
精度のためにJSONとJavascriptをすべて置き換えました。 – eidylon