0

我已经在网上搜索了一段时间,但我找不到我的问题的简单答案。所以,我有一个带有日期和时间类型的 Sharepoint 列表,并且我创建了一个自定义表单来添加新元素。在表单上,​​我创建了一个 DateTimeField 就像这样:

<SharePoint:DateTimeField runat="server" id="ff_Order_Asset_DeliveryDate" FieldName="DeliveryDate"  />

一切正常。现在我想添加一个验证,因为选择的日期不能是过去,所以我需要比较它与当前日期。我想使用 PreSaveAction 在 javascript 中执行此操作,但问题是,我不知道如何从我的控件中获取日期值。我试过这样的事情:

var dateSelected = document.getElementById("<%=ff_Order_Asset_DeliveryDate.ClientID%>");
var dateFromSelection = new Date(dateSelected.value);
var dateNow = new Date();
if (dateFromSelection < dateNow)
doSomething();

但它当然行不通。请赐教我怎么能做到这一点?我将不胜感激!

- - - - - - - - - - - - - - - - 回答 - - - - - - - - - --------------------

如果有人关心:似乎我唯一应该做的就是使用这个 jQuery 语法:

var dateSelected = $('input[id*="ff_Order_dFAsset_DeliveryDate"]');

因为正如 Mark Oreta 所说,Sharepoint 为我控制的 ID 添加了很多内容。

4

4 回答 4

1

您反对使用列验证吗?如果是这样,我建议只是验证这种方式。

如果 javascript 是您唯一的选择,那么它不会像选择文本框那么容易,因为 sharepoint 在生成表单时会将一堆数据添加到项目的 id 中。根据您发布的内容,您似乎已经提取了表单,所以我要做的是在 div 周围包裹一个跨度,以便在 div 内生成输入并以这种方式定位它。

<span id="span-dateselected">
 <SharePoint:DateTimeField runat="server" id="ff_Order_Asset_DeliveryDate" FieldName="DeliveryDate"  />
</span>

然后在您的 javascript 中,您需要找到跨度,然后是输入:

var dateFromSelection = document.getElementById("span-dateselected").getElementsByTagName("input")[0].value;

上面的代码片段做了一些可能好的也可能不好的假设,因此您可能想要测试 javascript 是否正确找到了输入。我建议使用 Jquery 遍历生成的列表,但我意识到这可能不是您的选择。

于 2012-08-02T20:47:20.497 回答
1

如果有人关心:似乎我唯一应该做的就是使用这个 jQuery 语法:

var dateSelected = $('input[id*="ff_Order_dFAsset_DeliveryDate"]');

因为正如 Mark Oreta 所说,Sharepoint 为我控制的 ID 添加了很多内容。

于 2015-05-27T09:58:54.570 回答
0

你试过下面的代码吗?

var dateSelected = document.getElementById("ff_Order_Asset_DeliveryDate.ClientID");

没有 ASp 标签?

于 2012-07-31T15:25:32.557 回答
0

不要使用日期时间字段控制见下面的网址: http ://www.entwicklungsgedanken.de/2009/08/21/do-not-use-datetimefield-when-displaying-the-date-of-your-field/

于 2013-02-19T06:18:42.420 回答