Domanda

In NewForm.aspx ho tre campi (StartTime, la durata e EndTime), Quando l'utente compila StartTime e durata, voglio javascript per calcolare e compilare EndTime automaticamente. Non posso usare:

_spBodyOnLoadFunctionNames.push("...");

perché in onload del StartTime e durata non sono ancora piene. Così ho provato:

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

* per il gusto di prova, ho messo starttime come normale campo di testo.

che non ha ancora funzionato neanche. Non voglio creare nuovi NewForm1.aspx e fare tutto manualmente, perché se lo faccio io dovrò attualizzare questa forma ogni volta nuovi campi vengono aggiunti nella lista. Quindi voglio compire in javascript. Avete qualche idea di come posso realizzarlo?

È stato utile?

Soluzione

Ecco esempio per tale funzionalità. Aggiungere e finire questo codice alla pagina o il file js separati:

<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>

Ho fatto test rapido e ha funzionato su eventi WSS standard Lista nuova forma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top