Получать уведомления, когда определенное изменение поля в NewForm.aspx

108
10

В 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')});

* для теста, я ставлю время начала как нормальное текстовое поле.


Он тоже не работал. Я не хочу создавать новый NewForm1.aspx и делать все вручную, потому что, если я это сделаю, мне придется актуализировать эту форму каждый раз, когда новые поля добавляются в список. Поэтому я хочу выполнить его в javascript. Вы знаете, как я могу это сделать?

спросил(а) 2021-01-27T21:12:26+03:00 4 месяца, 3 недели назад
1
Решение
63

Вот пример этой функции. Добавьте и завершите этот код на страницу или отдельный файл 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.

ответил(а) 2021-01-27T21:12:26+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема