3

我从 jQuery 得到了令人难以置信的回应,我希望有人能帮助我。我有一个简单的问题......我正在设置 HTML 表单的隐藏字段的“值”(也就是<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 消息,因为这对于理解问题的严重性很重要。当我运行它时,这是我在控制台上得到的:

在此处输入图像描述

现在我在“today”case 语句的最后一行(也就是“break;”行)设置了一个断点。根据控制台消息,一切都很好。似乎 DOM 元素 #activity-start_time 已设置。好吧,这就是它变得奇怪的地方。

我做的第一件事是测试对“targetElement”的引用,调试器控制台给我的第一件事是一个空数组:

空集

什么?这很奇怪。虽然我在思考几秒钟过去了,但突然间它自己解决了我的期望(我没有在控制台中重新输入它,它只是从空集变为你在下面看到的):

现在是完全不同的东西

现在 targetElement 与我期望的完全一样,我使用 jQuery 进行了一个简单的检查,即 #activity-start_time 的 DOM 元素报告了相同的值。你可以看到上面的结果。它与 targetElement 完全相同,只是它没有值。什么?!?

我完全不知所措。任何帮助将不胜感激。

ps 我会注意到其他人建议使用 .prop 而不是 .attr 两者的行为似乎完全相同。

4

1 回答 1

0

我知道我没有为人们提供足够的背景来真正深入研究这个问题,但我最终解决了它。问题是什么?真的很傻……不总是吗?无论如何,这只是问题'id'中的DOM元素不是唯一的情况。嗯。总是让你陷入困境的那些显而易见的事情会被你忽略。

无论如何,感谢您的耐心和帮助。

于 2012-12-04T16:36:56.797 回答