2016-12-10 3 views
0

Ich muss den Wert eines Feldes aktualisieren, wenn sich der Wert eines anderen ändert. Das Feld, das ich aktualisieren möchte, enthält einen Zeitstempel und ein Feld, dessen Wert sich ändern kann, enthält ein Datum (JJJJ-MM-TT). Die Änderung erfolgt über einen Kalender-Selektor, der wahrscheinlich der Grund ist, warum die Ereignisse onchange und oninput die Funktion nicht aufrufen können.Aktualisiere Eingangswert bei Änderung/Eingabe eines anderen mit Kalender-Selektor

Hier ist mein Code:

<input required class="short" type="text" id="startdate" name="startdate" value="<?php echo (isset($startdate) ? $startdate : "") ?>" oninput="updateTimestamp();" /> 
    <input required class="short" type="text" id="startdate_u" name="startdate_u" value="<?php echo (isset($startdate_u) ? $startdate_u : "") ?>" /> 
    <a href="#" onclick="cal.select(document.forms['project'].startdate,'anchor','yyyy-MM-dd'); return false;" name="anchor" id="anchor"><img src="images/calendar_icon.png" /></a> 
    <script> 
     var cal = new CalendarPopup(); 
     function popup(mylink, windowname) { 
      if (! window.focus)return true; 
       var href; 
      if (typeof(mylink) == 'string') 
       href=mylink; 
      else 
       href=mylink.href; 
      window.open(href, windowname, 'width=500,height=300,scrollbars=yes,resizable=yes'); 
      return false; 
     } 
     function updateTimestamp() { 
      var startDate = document.getElementById("startdate"); 
      var newTimestamp = Math.round(new Date(startDate.value).getTime()/1000); 
      document.getElementById("startdate_u").value = newTimestamp.toString(); 
     } 
    </script> 

Hier ist ein Link auf den Kalender-Code: http://www.mattkruse.com/javascript/calendarpopup/source.html

ich nicht JQuery verwenden werde. Ihr Rat wird sehr geschätzt :) Die gesamte Website ist nach HTML5-Standards geschrieben - ich lese, dass oninput sollte dann tun, aber es tut es nicht. Getestet sowohl in Chrome als auch in IE 11.

+0

Sie erhalten nicht das '.value' für' startDate' und in Ihrem 'Math.round (neues Datum (startdatum)' hat die Variable keinen Großbuchstaben ** D **. Versuchen Sie 'Math. Runde (neues Datum (startDate.value) .getTime()/1000); ' – NewToJS

+0

Sie haben Recht. Ich tippte gerade diese, die die Typos erklärt. Früher versuchte ich beide mit' .value' und ohne. Nicht einmal ein einfaches ' alert() 'wird ausgelöst – cheeseus

+0

Ich habe es gerade mit' Math.round (neues Date (startDate.value) .getTime()/1000) versucht; 'too - nothing.Ich denke, das Problem ist, dass das' oninput'-Event nicht funktioniert Feuer, weil ich das Datum mit dem Kalenderwähler ändere, aber keine Idee, wie man das repariert. – cheeseus

Antwort

1

Dieser Kalender definiert auch eine setReturnFunction, die erwartet, dass der Name der Funktion das Ergebnis erhält.

Also ich denke, Sie müssen das auf den Namen der Funktion, die das Ergebnis erhalten wird, füllen Sie Ihre Eingabe und lösen Sie alle anderen Funktionen, die Sie mögen.

Etwas wie:

<script> 
    function dateSelected(y,m,d){ 
    // Fill in your input as probably it will not be filled. 
    // Trigger any additional functionality 
    updateTimestamp(); 
    var dateField = document.getElementById("startdate"); 
    dateField.value = y + "-" + m + "-" + d; 
    } 

    var cal = new CalendarPopup(); 
    cal.setReturnFunction('dateSelected'); 
    function popup(mylink, windowname) { 
    if (! window.focus)return true; 
    var href; 
    if (typeof(mylink) == 'string') 
    href=mylink; 
    else 
    href=mylink.href; 
    window.open(href, windowname, 'width=500,height=300,scrollbars=yes,resizable=yes'); 
    return false; 
    } 

    function updateTimestamp() { 
    var startDate = document.getElementById("startdate"); 
    var newTimestamp = Math.round(new Date(startDate.value).getTime()/1000); 
    document.getElementById("startdate_u").value = newTimestamp.toString(); 
    } 
    </script> 

Hinweis: durchaus ein paar Dinge im Code kann verbessert werden, mit dem Kalender zu starten.

Verwandte Themen