Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么导致这个JavaScript关联数组出了问题?_Javascript_Arrays_Dom - Fatal编程技术网

是什么导致这个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实际上是什么。