Nie da się ustawić .value dla <input/>

0

Tak: mam "alergię" na debilne pomyły (w stylu n-krotne zapętlanie pętli jednokrotnej; tak, to jest taki WTF że aż trudno uwierzyć że ktoś coś takiego napisał) twórców różnych aplikacji.

Mam apkę na intranecie, tam jest webpage z formem. W jednym z div są pola tekstowe (typu input), które to powinny przyjmować wartość randomowe. Wywołanie funkcji eventem onclick przycisku (button)

mam tak:

function getValues() {
    let vtr = Math.random().toPrecision(4);
    let hwc = Math.random().toPrecision(4);

    document.querySelector('input[id="vtrpercent"]').value = vtr;
    document.querySelector('input[id="hwclock"]').value = hwc;

    // Send error to console
    logErrorGettingValuesDisplayed();
}

oraz

function logErrorGettingValuesDisplayed() {
    return console.error("Unable to read correct values");
}

Ani jedno ani drugie nie działa jak powinno. Pierwsze nie robi nic widocznego dla usera, drugie wywala error w konsoli po czym czyści konsolę.
Ciekawostka: jeśli zamienię pierwszy skrypt tak aby zamiast do konsoli, pokazywał alert, wtedy wszystko działa jak powinno.

Co jest nie tak?

2

Ja tu widzę dwie sprawy do omówienia:

Czyszczenie konsoli

console.error nie czyści konsoli.
Wygląda na to, że jakiś kod czyści ci konsolę - pierwsze się tego pozbądź, bo będzie ciężko debugować kod, który się wywala.

Spróbuj przed pierwszym <script> w HTMLu dodać:

<script>
console.clear = () => console.trace("Coś próbuje wyczyścić konsolę");
window.clear = console.clear;
</script>

Nie jest idealnie, ale na 99% usunie czyszczenie konsoli, a ty będziesz w stanie zidentyfikować z którego miejsca w kodzie masz wywołane czyszczenie konsoli - wywołanie do usunięcia.

Meritum

Z tego co widzę funkcja nazywa się get..., a tymczasem ona nic nie zwraca - wręcz przeciwnie - ustawia ona nowe wartości w inputach.

Co więc masz na myśli mówiąc - "nie działa jak powinno"? Bo ciężko zrozumieć z tego kodu intencje, a wygląda to całkiem poprawnie wg opisu. Dorzuć może jeszcze kawałek kodu HTML.

Do tego dwa pytanka:

  • Czy po zamknięciu alertu nadal wszystko jest ok czy tylko na czas wyświetlania alertu?
  • I w ogóle dlaczego wywołujesz error w konsoli bez żadnego sprawdzenia czy jest ku temu powód?
0

@dzek69: co do konsolowego error to nie ja ten kod pisałem, ja go mam zdebugować........ także nie wiem czemu jest tak a nie inaczej. Również moim zdaniem tam powinno być zwykłe console.log użyte.

Po zamknięciu alertu formularz jest czyszczony.

Zaraz wstawię ten js który podałeś i zaraportuje z powrotem.

0

@dzek69: dziękli za pomoc. Temat rozwiązany. :)
Prawidłowy, działający kod to:

function logErrorAsInfoMessageGettingValuesDisplayed() {
			let errDisplayingValues = "Unable to read correct values";
			console.log(errDisplayingValues);
		}

		function getValues() {
			let vtr = Math.random().toPrecision(4);
			let hwc = Math.random().toPrecision(4);
			document.querySelector('input[id="vtrpercent"]').value = vtr;
			document.querySelector('input[id="hwclock"]').value = hwc;

			// Send error to console
			logErrorAsInfoMessageGettingValuesDisplayed();
		}

1 użytkowników online, w tym zalogowanych: 0, gości: 1