JS/HTML: User Inputs statt Predefines nehmen; onChange Events werden ignoriert

Hi,

Mein Projekt: https://koppenleitner.de/print/

Ich nutze hier eine Anwendung die ich von github habe: dabei kann man sich Karten direkt über die Anwendung als PDF oder PNG ausgeben lassen.

Folgende Probleme kann ich derzeit nicht lösen und weiß auch nicht, nach welchen Begrifflichkeiten ich suchen soll:

1. Im "Ausgabeformat" gibt es zahlreiche DIN Formate die der User auswählen kann - ändert er jedoch die Breite oder die Höhe, so springt das Dropdown-Menu nicht auf "Eigener Wert" sondern bleibt beim vorher ausgewählten Format stehen.
2. Wählt man eines der DIN Formate im Dropdownmenu, so aktualisiert sich unten die Karte erst, wenn der Wert nochmal per Hand gelöscht und wieder eingetragen wird. Das onchange event das vom Dropdown ausgelöst wird, wird hier nicht als change erkannt.
3. Wenn der User im Feld "Style URL" eine eigene URL angibt, soll diese, statt den Einträgen in "Map Style" übernommen werden, und im Dropdownmenu wie bei Problem 2 auf "Eigener Wert" umspringen.

Sind leider sehr spezielle Fragen, ich hoffe jemand hat Tipps für mich!

Grüße,

der Kartograph
 
Ist leider ziemlich viel Code der dahinter steckt. Hier mal Auszüge:

HTML:
 <label for="formatInput">Ausgabeformat</label>
                        <form action="/revenue_lines/lock" id="outGroup" method="post" accept-charset="utf-8">
                          <div style="display:none;">
                            <input type="hidden" name="_method" value="POST">
                          </div>
                          <select name="formatInput" class="form-group" id="formatInput">
                            <option value="210_297">Eigener Wert</option>
                            <option value="210_297">DIN A4 Hochformat</option>
                            <option value="297_420">DIN A3 Hochformat</option>
                            <option value="420_594">DIN A2 Hochformat</option>
                            <option value="594_841">DIN A1 Hochformat</option>
                            <option value="841_1189">DIN A0 Hochformat</option>
                            <option value="297_210">DIN A4 Querformat</option>
                            <option value="420_297">DIN A3 Querformat</option>
                            <option value="594_420">DIN A2 Querformat</option>
                            <option value="841_594">DIN A1 Querformat</option>
                            <option value="1189_841">DIN A0 Querformat</option>
                          </select></p>
                      </div>
                    </div>
                    <div class="col-md-2">
                      <div class="form-group" id="widthGroup">
                        <label for="widthInput">Breite</label>
                        <input name="width" class="form-control" type="text" id="widthInput">
                      </div>
                    </div>
                    <div class="col-md-2">
                      <div class="form-group" id="heightGroup">
                        <label for="heightInput">Höhe</label>
                        <input name="heigth" class="form-control" type="text" id="heightInput">
                      </div>
                    </div>


Javascript:
  <script>
    $('#formatInput').on('change', function () {
      var val = this.value;
      var parts = val.split("_");
      $('#widthInput').val(parts[0]);
      $('#heightInput').val(parts[1]);
    });
  </script>


Javascript:
//
// Configuration changes / validation
//
form.widthInput.addEventListener('change', function(e) {
    'use strict';
    var unit = form.unitOptions[0].checked ? 'in' : 'mm';
    var val = (unit == 'mm') ? Number(e.target.value / 25.4) : Number(e.target.value);
    var dpi = Number(form.dpiInput.value);
    if (val > 0) {
        if (val * dpi > maxSize) {
            errors.width.state = true;
            errors.width.msg = 'The maximum image dimension is ' + maxSize +
                'px, but the width entered is ' + (val * dpi) + 'px.';
        } else if (val * window.devicePixelRatio * 96 > maxSize) {
            errors.width.state = true;
            errors.width.msg = 'The width is unreasonably big!';
        } else {
            errors.width.state = false;
            if (unit == 'mm') val *= 25.4;
            document.getElementById('map').style.width = toPixels(val);
            map.resize();
        }
    } else {
        errors.width.state = true;
        errors.height.msg = 'Width must be a positive number!';
    }
    handleErrors();
});
form.heightInput.addEventListener('change', function(e) {
    'use strict';
    var unit = form.unitOptions[0].checked ? 'in' : 'mm';
    var val = (unit == 'mm') ? Number(e.target.value / 25.4) : Number(e.target.value);
    var dpi = Number(form.dpiInput.value);
    if (val > 0) {
        if (val * dpi > maxSize) {
            errors.height.state = true;
            errors.height.msg = 'The maximum image dimension is ' + maxSize +
                'px, but the height entered is ' + (val * dpi) + 'px.';
        } else if (val * window.devicePixelRatio * 96 > maxSize) {
            errors.height.state = true;
            errors.height.msg = 'The height is unreasonably big!';
        } else {
            errors.height.state = false;
            if (unit == 'mm') val *= 25.4;
            document.getElementById('map').style.height = toPixels(val);
            map.resize();
        }
    } else {
        errors.height.state = true;
        errors.height.msg = 'Height must be a positive number!';
    }
    handleErrors();
});
form.dpiInput.addEventListener('change', function(e) {
    'use strict';
    var val = Number(e.target.value);
    if (val > 0) {
        errors.dpi.state = false;
        var event = document.createEvent('HTMLEvents');
        event.initEvent('change', true, true);
        form.widthInput.dispatchEvent(event);
        form.heightInput.dispatchEvent(event);
    } else {
        errors.dpi.state = true;
    }
    handleErrors();
});
form.styleSelect.addEventListener('change', function() {
    'use strict';
    try {
        var style = form.styleSelect.value;
        if (style.indexOf('tilehosting') >= 0)
            style += '?key=' + mapTilerAccessToken;
        map.setStyle(style);
    } catch (e) {
        openErrorModal("Error changing style: " + e.message);
    }
    // Update attribution requirements
    if (form.styleSelect.value.indexOf('mapbox') >= 0) {
        document.getElementById('mapbox-attribution').style.display = 'block';
        document.getElementById('openmaptiles-attribution').style.display = 'none';
    } else {
        document.getElementById('mapbox-attribution').style.display = 'none';
        document.getElementById('openmaptiles-attribution').style.display = 'block';
    }
});
form.mmUnit.addEventListener('change', function() {
    'use strict';
    form.widthInput.value *= 25.4;
    form.heightInput.value *= 25.4;
});
form.inUnit.addEventListener('change', function() {
    'use strict';
    form.widthInput.value /= 25.4;
    form.heightInput.value /= 25.4;
});
if (form.unitOptions[1].checked) {
    // Millimeters
    form.widthInput.value *= 25.4;
    form.heightInput.value *= 25.4;
}
form.latInput.addEventListener('change', function() {
    'use strict';
    map.setCenter([form.lonInput.value, form.latInput.value]);
});
form.lonInput.addEventListener('change', function() {
    'use strict';
    map.setCenter([form.lonInput.value, form.latInput.value]);
});
form.zoomInput.addEventListener('change', function(e) {
    'use strict';
    map.setZoom(e.target.value);
});

Interessant ist, dass er die Karte richtig ausgibt und die Höhe und Breite Felder auch nutzt, auch wenn die Karte auf der Website falsch dargestellt ist und nicht updated.
 

Thallius

Top Contributor
Hast du denn mal paar console.log rein gemacht um zu schaun was eigentlich aufgerufen wird. Also wenn du ein val() auf ein Select Feld aufrufst, dann ist das genauso als würdest du es mit der Maus anklicken. Es wird also auch dort ein change event ausgelöst. Vielleicht liegt hier schon dein Verständnisproblem?
 
Nee hab ich nicht, kenn mich leider auch nicht sonderlich gut mit Java und Coden aus. Ist wie gesagt ein Projekt das ich nur "verfeiern" soll und genau die Dinge die ich mir wünsche, lassen sich nur schwer für mich realisieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S User Name an Html übergeben Angular, React, JQuery - Fragen zu JavaScript 6
H0xt html übergibt an js ein wert nicht Angular, React, JQuery - Fragen zu JavaScript 18
C HTML-JAVA Angular, React, JQuery - Fragen zu JavaScript 2
FranziskaN Hilfe Los-Topf in js und html Angular, React, JQuery - Fragen zu JavaScript 18
Zeppi Webserver erweitert index.html Angular, React, JQuery - Fragen zu JavaScript 1
Aleyna_ Einbinden von js (ts) und HTML-Datei funktioniert nicht Angular, React, JQuery - Fragen zu JavaScript 16
G Variablen aus URL auslesen und in HTML darstellen Angular, React, JQuery - Fragen zu JavaScript 1
isatindersinght jquery convert html to image Angular, React, JQuery - Fragen zu JavaScript 0
D HTML-Seite erkennt JS-File im Ordner nicht Angular, React, JQuery - Fragen zu JavaScript 4
M Mit innerHTML in eine bestimmte HTML-Datei schreiben Angular, React, JQuery - Fragen zu JavaScript 8
J Html Button mit JavaScript ausführen Angular, React, JQuery - Fragen zu JavaScript 5
D Java Tool um HTML und Javascript zu analysieren Angular, React, JQuery - Fragen zu JavaScript 3
D Variable ohne HTML Tags ausgeben Angular, React, JQuery - Fragen zu JavaScript 14
F Schnellen Browser für HTML mit JS drin. Angular, React, JQuery - Fragen zu JavaScript 6
T html code per javascript einfügen Angular, React, JQuery - Fragen zu JavaScript 7
B HTML, CSS - Frame online aktualisieren Angular, React, JQuery - Fragen zu JavaScript 11
Chris81T Java <> DWR <> JavaScript/HTML Angular, React, JQuery - Fragen zu JavaScript 2
N warum kann ich kein javascript und css in mein html script einbinden Angular, React, JQuery - Fragen zu JavaScript 3
Gossi Frage zu Html (evtl. auch JavaScript?) Angular, React, JQuery - Fragen zu JavaScript 10
J Problem:Zugriff auf Ausgabefeld (HTML-Formular)) Angular, React, JQuery - Fragen zu JavaScript 3
C sort_table.js HTML-Tabelle direkt sortiert anzeigen lassen Angular, React, JQuery - Fragen zu JavaScript 5
O HTML Dropdownliste Angular, React, JQuery - Fragen zu JavaScript 3
J HTML frage mit javascript lösbar? Angular, React, JQuery - Fragen zu JavaScript 3
H Kalender mit Java(Script) in HTML Angular, React, JQuery - Fragen zu JavaScript 6
T HTML Tabelle - per JS neue Zeile Angular, React, JQuery - Fragen zu JavaScript 4
N HTML-Formular mit Java Script berechnen Angular, React, JQuery - Fragen zu JavaScript 4
A Flash-oder HTML Dateien mittels Java Kalenderscript anzeigen Angular, React, JQuery - Fragen zu JavaScript 4
G html mit java auslesen Angular, React, JQuery - Fragen zu JavaScript 6
L Dauerlaufzeile mit Fotos für html Angular, React, JQuery - Fragen zu JavaScript 2
M den Browser auffordern html-seite nachzuladen Angular, React, JQuery - Fragen zu JavaScript 3
D Java Variablen in HTML/Java abrufen Angular, React, JQuery - Fragen zu JavaScript 4
S HTML Cod in einer bestimmten stelle einfügen. Angular, React, JQuery - Fragen zu JavaScript 12
M Umwandeln von Umlauten im HTML form Angular, React, JQuery - Fragen zu JavaScript 10
W Wert aus HTML-Quelltext auslesen Angular, React, JQuery - Fragen zu JavaScript 8
C Flashfilm aus einer HTML-Seite im Fullscreen öffnen Angular, React, JQuery - Fragen zu JavaScript 2
A Java-Script mit HTML ändern Angular, React, JQuery - Fragen zu JavaScript 6
T java-html navigationsproblemchen Angular, React, JQuery - Fragen zu JavaScript 4
J html befehl in JS Angular, React, JQuery - Fragen zu JavaScript 5

Ähnliche Java Themen

Neue Themen


Oben