我有一个函数,它传入一个名为“targetElement”的 jQuery 对象,这是我需要操作的表单字段。我使用此函数在表单加载后为其设置默认值。在一种形式中,我有三个隐藏的表单元素(又名<input type="hidden">
),每个元素都分配了一个值,三个中的两个可以正常工作。第三个让我发疯。
这是函数中的代码片段:
case "today":
SetFieldValue (targetElement , Date.today().toString("yyyy-MM-dd HH:mm:ss") );
console.log ('Setting ' + jQuery(targetElement).attr('id') + ' to "today": ' + Date.today().toString("yyyy-MM-dd HH:mm:ss") );
break;
SetFieldValue 函数在哪里:
function SetFieldValue ( domObject, value ) {
// as a safety function, check if a string representation of the domObject was passed in and convert it to a jQuery object if it was
if ( jQuery.type(domObject) === "string") {
domObject = jQuery(domObject);
}
if ( jQuery.inArray (domObject.prop('tagName').toLowerCase(),['input' , 'select' , 'textarea']) >= 0 ) {
console.log ("setting to value attribute: " + value);
domObject.attr('value',value);
console.log ("now set to: " + domObject.attr('value') + "(" + domObject.attr('id') + ")" );
} else {
console.log ("setting to html attribute");
domObject.html( value );
}
return domObject;
}
事情就是这样。我在调用 SetFieldValue 之后直接设置了一个调试断点。我输入了“targetElement”,它清楚地表明该值已设置。然而,当我键入对 DOM 字段的 jQuery 引用时,它会显示没有设置值。嗯?
现在有一件事我没有提到......我怀疑它很重要......当我在调试器中输入“targetObject”时,它所做的第一件事就是返回一个空数组:
然后一两秒钟后,它自动神奇地扩展为您最初看到的屏幕截图。请帮忙!
更新
到目前为止,我非常感谢所有帮助,但我怀疑真正的问题是响应 targetElement(一个 jQuery 对象)的“延迟”暗示的。有关更多详细信息,请参见上文。我还在下面添加了另一个有趣的快照。如果您注意到代码中的 log.console 语句,这将是有意义的:
我试图做的是:
a) 说明我将要设置的值 b) 将值设置为声明的意图 (aka, 2012-12-02 00:00:00) c) 检查它是否已设置 (它有) d) 然后从呼叫路由再次检查(这也确认它已被设置)
在最后一个 log.console(“break”语句)之后的行上,我放置了一个断点,调试器不同意所有控制台消息。奇怪!
更新 2
人们要求提供额外的上下文,准确地说是“代码”。我正在努力寻找一种好方法来提供一个紧凑的代码模块来重现问题,所以我想也许一个简短的截屏视频演示这个问题会有所帮助。这里有两个尝试: