Ricevi una notifica quando un certo cambiamento campo in NewForm.aspx
-
19-09-2019 - |
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?
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.