Javascript从Javascript对象属性返回不正确的值
因此,我有一个Javascipt对象数组,其中包含与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();
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);