2010-01-07 36 views
0

在NewForm.aspx中我有三個字段(StartTime,Duration和EndTime),當用戶填寫StartTime和Duration時,我希望javascript自動計算並填充EndTime。我無法使用:NewForm.aspx

_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

下面是該功能的示例。添加並完成這段代碼的頁面或單獨的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事件列表新形式。

+0

謝謝它的作品! – ajitdh 2010-01-08 13:23:55

相關問題