Javascript从Javascript对象属性返回不正确的值

Javascript从Javascript对象属性返回不正确的值,javascript,html,json,properties,Javascript,Html,Json,Properties,因此,我有一个Javascipt对象数组,其中包含与select元素中的项相对应的额外属性和信息 当用户在下拉列表中选择一个元素时,它会在Javascipt数组中查找该项,并用相应Javascipt对象中的相关值填充页面上的另外两个字段 以下是js函数: function pickedCode(who) { who = $(who); var opt = who.find(':selected'); var val = opt.val();

因此,我有一个Javascipt对象数组,其中包含与
select
元素中的项相对应的额外属性和信息

当用户在下拉列表中选择一个元素时,它会在Javascipt数组中查找该项,并用相应Javascipt对象中的相关值填充页面上的另外两个字段

以下是js函数:

    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;
            }
        }
    }
<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>
它正在查找并找到合适的元素。
它获取文本并将其正确设置到文本区域

问题在于属性
美元
。出于某种原因,它总是为
美元
属性返回值
“0.00”
,即使是金额大于0的项目,我一辈子都不知道为什么。最初,它被命名为
Amount
;我想那可能是个保留字或什么的,所以我把它改成了美元。我最初也将其作为实际数字,而不是字符串,但仍然存在相同的问题(然后它总是返回
0
)。我认为将其分配给变量可能有问题,因此我提醒了实际属性本身,而不是变量(该提醒仅用于调试),但该属性直接返回0

我还认为检查
code.Id==val
时可能是类型问题,但这不是问题所在,因为它实际上是在查找正确的项并从中获取属性文本

我在这里发现了两个类似的问题,但它们似乎都与属性本身是数组和用户没有索引到属性有关。虽然我的不是数组,但单个属性都是直接向上的值

我在Firefox(57.0)和Google Chrome(62.0.3202.94)中都试过,甚至在Opera(49.0.2725.47)中也试过,在所有三种浏览器中都得到了相同的结果

为了让自己真正感到困惑,我决定在Firefox中逐步调试客户端调试器,看看会发生什么。查看页面来源时,其值显然为46.2:

但是,当单步执行函数并查看变量时,当它从数组中取出代码时,它正在将值0.00加载到内存中:


所以,是的。。。现在我完全搞不清楚到底发生了什么,因为它加载到内存中的值与实际源不匹配。我查了一遍代码,以确保。。。呸!看着截图引发了一个想法,我想出来了。详细信息将作为答案提供给后代。

请尝试替换var amt=code.Dollars;详情如下:

var amt = Number(code.Dollars);

因此,它在我的思考过程中激发了灵感,并将@sandy_22的评论和Javascript调试器的屏幕截图结合在一起

代码中保存的数组是使用文字从代码后面分配的。例如
var代码=

当更改页面上的其他下拉列表之一时,它将通过AJAX根据所选客户机重新绑定文本(不同的客户机具有不同的费用金额)

这一切都很好,它将更新文本,源代码得到了适当的更新,当我执行
查看源代码时,我将看到更新的数组

但是,它没有导致Javascript将新数组重新加载到
code
变量中。因此,即使源代码显示了正确的数组数据,内存中的变量本身仍然保存着数据的原始副本

我去掉了文本,因此客户端代码变成了
var code=null
然后在服务器端,在切换客户端和重新绑定代码时,我现在用Javascript代码片段更新它们:
AjaxManager.responseDescripts.Add(“code=“&linqForNewArray()&””)


通过这种方式,内存中的变量实际上得到了更新,现在一切正常。

-我无法重现这个问题。为了准确起见,我用Javascript替换了JSON中出现的所有问题。尝试do var amt=parseFloat(code.Dollars);你肯定希望你的钱是数字,而不是字符串。没有乐趣。以
号码(…)
新号码(…)
的形式尝试。无论哪种方式,它仍然显示为
0
var amt = Number(code.Dollars);