我有一个函数,它传入一个名为“targetElement”的jQuery对象,这是我需要操作的表单字段。我使用此函数在加载后为表单设置默认值。在一种形式中,我有三个隐藏的表单元素(aka,<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”,清楚地显示已设置值HAS。然而,当我输入一个对DOM字段的jQuery引用时,它显示没有设置值。咦?
现在有一件事我没有提及......我怀疑它很重要......当我在调试器中输入“targetObject”时,它做的第一件事就是返回一个空数组:
然后一两秒后,它会自动神奇地扩展到您最初看到的屏幕截图中。请帮忙!
到目前为止,我真的非常感谢所有的帮助,但我怀疑在响应targetElement(一个jQuery对象)的“延迟”中暗示了真正的问题。请参阅上文了解更多详情。我还在下面添加了另一个有趣的快照。如果您注意到代码中的log.console语句,这将是有意义的:
我试图做的是:
a)说明我要将值设置为什么 b)将值设置为声明的意图(又名,2012-12-02 00:00:00) c)检查它是否已经设置(它有) d)然后再从呼叫路由检查(这也确认已经设置)
在最后一个log.console(“break”语句)之后的行上,我放了一个断点,调试器与所有控制台消息没有不同意。 Bizzarre!
人们已经要求提供额外的背景,确切地说“代码”。我正在努力找出一个很好的方法来提供一个紧凑的代码模块来重现这个问题所以我想也许是一个简短的截屏视频来证明这个问题会有所帮助。这是两次尝试:
答案 0 :(得分:1)
不是通过jQuery设置value属性,而是直接引用元素的value属性:
domObject[0].value = value;
或者,甚至不要将它包装在jQuery对象中:
domObject.value = value;
答案 1 :(得分:1)
尝试使用.val(value)
代替.attr('value',value)
答案 2 :(得分:0)
我知道我没有提供足够的背景让人们真正深入研究这个问题,但我最终解决了这个问题。问题是什么?实在是太傻了......总是这样吗?无论如何,这只是问题中的DOM元素的一个例子&#39; id&#39;不是独一无二的。哎呀。它总是显而易见的事情,然后你忽略了让你陷入困境。
无论如何,感谢您的耐心和帮助。