Получать уведомления при изменении определенного поля в NewForm.aspx - PullRequest
0 голосов
/ 07 января 2010

В NewForm.aspx у меня есть три поля (StartTime, Duration и EndTime). Когда пользователь заполняет StartTime и Duration, я хочу, чтобы JavaScript автоматически вычислял и заполнял EndTime. Я не могу использовать:

_spBodyOnLoadFunctionNames.push("...");

потому что при загрузке StartTime и Duration еще не заполнены. Итак, я попробовал:

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

* ради теста я положил время начала как обычное текстовое поле.

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

1 Ответ

1 голос
/ 07 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...