我从jQuery得到令人难以置信的回应,我希望有人可以帮助我。我有一个简单的问题...我正在设置表单加载时HTML表单的隐藏字段(aka,<input type='hidden'>
的“值”。我有一个包含三个隐藏字段的表单,两个工作正常。第三个......这就是问题所在:
一旦表单完成加载(是的,它已加载并且可见...作为间接证明,前两个隐藏字段已加载并由jQuery成功设置),我运行以下代码(仅显示相关代码段为此最后一个字段是设置为“今天”的日期):
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是我写的一个小函数,它允许设置DOM元素,无论它是什么类型。代码如下:
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;
}
请注意console.log消息,因为这对于理解问题的疯狂非常重要。当我运行它时,这是我在控制台上得到的:
现在我在“今天”案例陈述的最后一行设置一个断点(也就是说,在“break;”行)。基于控制台消息一切都很好。看来DOM元素#activity-start_time已经设置好了。好吧,这里变得奇怪。
我要做的第一件事是测试对“targetElement”的引用,调试器控制台给我的第一件事就是一个空数组:
什么?这很奇怪。虽然我正在思考几秒钟过去了但突然间它会自行解析为我所期望的(我不会将它重新输入到控制台中,它只是从空集改为你在下面看到的):
既然targetElement正如我所期望的那样,我用jQuery做了一个简单的检查,#activity-start_time的DOM元素报告了相同的值。你可以看到上面的结果。它与targetElement完全相同,除了它没有值。什么?!?
我完全失去了。任何帮助将不胜感激。
肯
P.S。我会注意到其他人建议使用.prop而不是.attr似乎表现得完全一样。
答案 0 :(得分:0)
我知道我没有提供足够的背景让人们真正深入研究这个问题,但我最终解决了这个问题。问题是什么?真的很傻......并不总是这样吗?无论如何,这只是问题'id'中DOM元素的一个案例,并不是独一无二的。哎呀。这一直是你忽略的明显事情,让你陷入困境。
无论如何,感谢您的耐心和帮助。