在NewForm.aspx中更改某个字段时收到通知

时间:2010-01-07 11:34:42

标签: javascript sharepoint sharepoint-designer

在NewForm.aspx中我有三个字段(StartTime,Duration和EndTime),当用户填写StartTime和Duration时,我希望javascript计算并自动填充EndTime。我不能用:

_spBodyOnLoadFunctionNames.push("...");

因为在onload上,StartTime和Duration尚未填充。所以我试过了:

var control = getTagFromIdentifierAndTitle("input", "", "StartTime");
control.observe('change', function(){alert('ola')});
Event.observe('change', function(){alert('ola')});

*为了测试,我将starttime作为普通文本字段。

它也没有用。我不想创建新的NewForm1.aspx并手动完成所有操作,因为如果我这样做,我将不得不每次在列表中添加新字段时实现此表单。所以我想在javascript中完成它。你知道我怎么能完成它?

1 个答案:

答案 0 :(得分:1)

以下是该功能的示例。添加并完成此代码到页面或单独的js文件:

<script type="text/javascript">
_spBodyOnLoadFunctionNames.push("InitEndDateCalculation");

var inptStartTime;
var inptDuration;
var inptEndTime;

function InitEndDateCalculation() {
    inptStartTime=getTagFromIdentifierAndTitle("input", "DateTimeFieldDate", "Start Time");
    inptDuration=getTagFromIdentifierAndTitle("input", "TextField", "Duration");
    inptEndTime=getTagFromIdentifierAndTitle("input", "DateTimeFieldDate", "End Time");

    inptStartTime.setAttribute('onvaluesetfrompicker', "CalcEntTime();");
    $(inptStartTime).observe('change', function(){ CalcEntTime(); }); 
    $(inptDuration).observe('change', function(){ CalcEntTime(); }); 
}

function CalcEntTime() {
    var endDate;
    //TODO: Calculate end date by inptStartTime.value and inptDuration.value
    inptEndTime.value=endDate;
}

function getTagFromIdentifierAndTitle(tagName, identifier, title) {
  var len = identifier.length;
  var tags = document.getElementsByTagName(tagName);
  for (var i=0; i < tags.length; i++) {
    var tempString = tags[i].id;
    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
      return tags[i];
    }
  }
  return null;
}
</script>

我做了快速测试,它在标准的wss事件列表新表格上工作。