是什么导致这个JavaScript关联数组出了问题?
我有一个关联数组,我已经验证(通过是什么导致这个JavaScript关联数组出了问题?,javascript,arrays,dom,Javascript,Arrays,Dom,我有一个关联数组,我已经验证(通过控制台.log)原来是 this.RegionsChecked = {"US":true,"APAC":true,"Canada":true,"France":true,"Germany":true,"India":true,"Japan":true,"LATAM":true,"MEA":true,"UK":true,"WE":true}; 我有一个事件处理程序,当在HTML中选中/取消选中对应项时,它会尝试切换该项的值: Calculator.prototy
控制台.log
)原来是
this.RegionsChecked = {"US":true,"APAC":true,"Canada":true,"France":true,"Germany":true,"India":true,"Japan":true,"LATAM":true,"MEA":true,"UK":true,"WE":true};
我有一个事件处理程序,当在HTML中选中/取消选中对应项时,它会尝试切换该项的值:
Calculator.prototype.UpdateGraphs = function ( $elem )
{
// $elem : input[type="checkbox"] element that was clicked, as a jQuery object
var $parent = $elem.parent(); // Parent of input that was clicked.
// Will either be a th.region or a td#guiderow-[metric_name]
if ( $parent.hasClass('region') )
{
var region_name = $parent.text();
this.RegionsChecked[region_name] = !this.RegionsChecked[region_name]; // toggle region name
console.log(JSON.stringify(this.RegionsChecked)); // TEST
}
// ...
奇怪的是,例如,当我更改Canada
的检查值时,数组有时会变成
this.RegionsChecked = {"US":true,"APAC":true,"Canada":true,"France":true,"Germany":true,"India":true,"Japan":true,"LATAM":true,"MEA":true,"UK":true,"WE":true,"\n\t\t\t\t\tCanada":true};
(查看最后一个键,之前的“未知”
)
而不是预期的
this.RegionsChecked = {"US":true,"APAC":true,"Canada":false,"France":true,"Germany":true,"India":true,"Japan":true,"LATAM":true,"MEA":true,"UK":true,"WE":true};
我认为,这在某些时候确实是(但仍需验证)。我仍在试图弄清楚它是如何持续发生的,但你知道为什么吗
编辑:奇怪。。。它只是做对了。我找不到任何可辨别的模式,当它工作和不。。我正在使用Microsoft Sharepoint Designer,它可以做一些奇怪的事情…一般来说,依赖DOM节点的实际文本作为信息键不是一个好主意,特别是如果DOM是由大型笨拙的CMS(如SharePoint)动态生成的,它在文本进入DOM之前对文本执行各种转换(使用设计器为该链添加了另一个有趣的步骤)。这就是构造的用途 这就是说,如果你必须这样做,你可能最好在使用之前修剪一下你的文本。即
var region_name = $.trim($parent.text());
如果您的HTML包含缩进,那么在元素的
.text()
部分中显然会有制表符。@Xufox My HTML不应该有任何缩进。窗口大小调整时会出现缩进吗?我不知道。你甚至还没有分享你的HTML或者它是如何生成或者可能被修改的。如果你看到一堆\t
s,你不应该依赖于HTML应该是什么,而应该依赖于HTML实际上是什么。