2

我有一个函数,它传入一个名为“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

人们要求提供额外的上下文,准确地说是“代码”。我正在努力寻找一种好方法来提供一个紧凑的代码模块来重现问题,所以我想也许一个简短的截屏视频演示这个问题会有所帮助。这里有两个尝试:

截屏 1 截屏 2

4

3 回答 3

1

而不是通过jQuery设置value属性,直接引用元素的value属性即可:

domObject[0].value = value;

或者,甚至不将其包装在 jQuery 对象中:

domObject.value = value;
于 2012-12-02T23:23:53.387 回答
1

尝试使用.val(value)而不是.attr('value',value)

于 2012-12-02T23:24:00.790 回答
0

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

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

于 2012-12-04T16:39:19.920 回答