Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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—两个看似相同但并非';T_Javascript_Jquery - Fatal编程技术网

Javascript—两个看似相同但并非';T

Javascript—两个看似相同但并非';T,javascript,jquery,Javascript,Jquery,比较新手。。。到目前为止花了大约3个小时。。。如果你愿意的话,请考虑这个代码:< /P> function updateDataFields( mapIDToNewValue ) { $.each(dataFields, function(key, value) { var dataField = $( value ); // var dataField = $(this); // same difference console.l

比较新手。。。到目前为止花了大约3个小时。。。如果你愿意的话,请考虑这个代码:< /P>
function updateDataFields( mapIDToNewValue )
{
    $.each(dataFields, function(key, value)
    {
        var dataField = $( value );
        // var dataField = $(this); // same difference
        console.log( dataField );
        var iD = dataField.attr('id');

        //  DOES NOT WORK!!! i.e. going val() on this object does not update the INPUT element on the page!
        // dataField.val(mapIDToNewValue[ iD ]);

        var thePageElement = $( '#' + iD );
        console.log( thePageElement );
        console.log( '£ is dataField the same object as thePageElement?' + ( dataField === thePageElement ? 'yes' : 'no, you fool' ));
        // DOES WORK:
        thePageElement.val( mapIDToNewValue[ iD ] );

    });
}
说明:
dataFields
,一个文件全局变量*,由调用此变量的外部脚本传递,使用一个(完全)全局变量,该变量以背驮方式将
dataFields
附加到自身。此数据结构,
dataFields
,由类为
.dataField
的所有页面元素组成。所有这些实际上都是
INPUT
HTML元素

使用提供的参数
mapIDToNewValue
(从对数据库的AJAX调用),我想更新这些
输入的相应内容(即文本)
mapIDToNewValue
是一个映射,其中键与这些
数据字段的
attr('id')
相同,并且该值是需要在
输入中显示的新值

结果是
页面元素
数据字段
不是同一个对象。当我检查它们的控制台输出时,它们看起来几乎相同。。。除了
数据字段
,例如,它的高度为0,这足以让人心寒

我的工作假设是,
数据字段
,当通过这个背驮全局变量从调用脚本传递时,不知何故将其内容变成了“幻影”对象:它们与
页面元素
具有相同的
id
。。。但是它们不能对真正的页面元素本身产生任何影响

注意,这里不可能有重复的ID,或者类似的东西

欢迎任何解释

*根据使用匿名函数实现

稍后,针对帕特里克·巴尔的评论:

这很复杂。考虑到你使用了“有趣”这个词,我很想知道你的代表可能是什么。如果你是一位久经考验的JS大师(当然你也可能是其中之一),我会倾向于认为我需要开始一项法医故障查找任务

上下文:我正在开发一种“MySQL前端MSAccess表单”类型的东西,这是IMHO非常缺乏的。目前我正在处理子表单,一个主要目标是尽可能多地重用代码。我很快就超出了我的深度,不仅仅是因为异步性/并发性问题,就像gorgon一样,在每一个转折点上都会出现。我在考虑如何以一种信息丰富、有用的方式回答你的问题


对其他人:我现在意识到我必须把我的项目剥离到最底层,以了解这里发生了什么。。。如果仍然困惑于发布SSCCE(我们在Java中称之为SSCCE)。。。刚开始我以为那里的一位专家可能会认识到一个众所周知的问题,并能让我明白过来。

在检查了这里的情况后,我现在(在一定程度上)明白了发生了什么

事实上,
数据字段
数组
是从一个AJAX调用的结果中获得的,该调用加载(或者更准确地说,作为回调函数中的
数据
参数返回)一个HTML片段,其中包含几个带有class
.dataField
的页面元素,然后我通过
data.find>来收集这些元素(“.dataField”)

但事实上,尽管这些“页面元素”有数百个属性,就像直接“映射”到页面元素的对象一样,它们确实是“幻影”对象:具体地说,
clientHeight
等属性为0,似乎表明这是一个不可见的对象

只有当AJAX回调中返回的HTML被插入到
文档
结构中时(并通过为包含的
DIV
hidden
设置为
false
使其可见)这个HTML生成了真实的页面元素。然后,我必须用class
.dataField
选择这些页面元素,以获得非幻影对象(具有
clientHeight
20或任何东西)


非常奇怪,因为这些最初的“幻影”对象并没有因为HTML被添加到
文档中而变成“真实”对象。它们仍然……毫无用处(而且令人困惑!).

数据字段
在您的函数中没有定义。这对我来说很有用:我们真的需要知道如何填充
数据字段
。您能发布一个吗?通常,包含对象的两个变量,除非分配给完全相同的对象,否则将不相等。您需要一种通过原语值比较对象的方法。因此rry,但是你有没有说过,无论你得到的是输出<代码>是<代码>还是<代码>否,你都是傻瓜
?或者我们应该猜测吗?我可以这样复制这个问题:仅供参考,
$(“body”)!=$(“body”)