Javascript—两个看似相同但并非';T
比较新手。。。到目前为止花了大约3个小时。。。如果你愿意的话,请考虑这个代码:< /P>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
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”)