• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w javascript

Aruba Cloud - Virtual Private Server VPS
0 głosów
697 wizyt
pytanie zadane 7 grudnia 2022 w JavaScript przez Dawidziu Bywalec (2,630 p.)

Z jakiegoś powodu, po dodaniu tej linijki

else document.getElementById("Wypełnienie1W").style.width = pasek + "px";

ten kod przestaje działać

function czasMuzyka() {
	var teraz = new Date();
	var czasTeraz = (teraz.getHours() * 3600 + teraz.getMinutes() * 60 + teraz.getSeconds()) % 174;
	var pasek = czasTeraz * 100 / 174;
	
	if (czasTeraz < 7) document.getElementById("WidgetMiniPasek1").style.width = "4px";
	else document.getElementById("WidgetMiniPasek1").style.width = pasek + "px";
	
	pasek = czasTeraz * 274 / 174;
	
	if (czasTeraz < 7) document.getElementById("Wypełnienie1W").style.width = "4px";
	else document.getElementById("Wypełnienie1W").style.width = pasek + "px";
	
	var sekunda = czasTeraz % 60;
	var minuta = (czasTeraz - sekunda) / 60;
	
	if (sekunda < 10) sekunda = "0" + sekunda;
	
	document.getElementById("WidgetMiniTekst1").innerHTML = "<b>" + minuta + ":" + sekunda + "</b>";
	setTimeout("czasMuzyka()", 1000);
}

Co może być tego przyczyną?

komentarz 7 grudnia 2022 przez ScriptyChris Mędrzec (190,190 p.)
Czy jest jakiś błąd w konsoli?
komentarz 7 grudnia 2022 przez Dawidziu Bywalec (2,630 p.)
Uncaught TypeError: Cannot read properties of null (reading 'style')
    at czasMuzyka (Zegar.js:93:47)
    at onload (P1.html:42:83)
czasMuzyka @ Zegar.js:93
onload @ P1.html:42
komentarz 7 grudnia 2022 przez ScriptyChris Mędrzec (190,190 p.)
Czy element o ID "Wypełnienie1W" jest w DOM w momencie, gdy skrypt się wykonuje?
komentarz 7 grudnia 2022 przez Dawidziu Bywalec (2,630 p.)
Ogólnie skrypt ten jest w zewnętrznym pliku i używany jest do dwóch plików html, w jednym nie działa jednak wcale, a w drugim psuje się, po dodaniu tej linijki, niezależnie, czy ten element tam jest, czy nie
2
komentarz 7 grudnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Spróbuj dodać atrybut defer - jeśli to pomoże, to znaczy, że jednak tego elementu nie ma w DOM, gdy skrypt go szuka.

komentarz 7 grudnia 2022 przez VBService Ekspert (256,600 p.)
edycja 7 grudnia 2022 przez VBService

@Dawidziu, jako ciekawostkę

if (sekunda < 10) sekunda = "0" + sekunda;
sekunda.toString().padStart(2, '0')
`${sekunda}`.padStart(2, '0')

 

1 odpowiedź

0 głosów
odpowiedź 8 grudnia 2022 przez radek2002 Nowicjusz (230 p.)
Błąd polega na tym, że użyto nieprawidłowej nazwy identyfikatora elementu HTML ("Wypełnienie1W"). Identyfikatory powinny zawierać tylko znaki alfanumeryczne oraz podkreślnik lub myślnik, a nie polskie znaki diakrytyczne.
komentarz 8 grudnia 2022 przez VBService Ekspert (256,600 p.)

Użycie polskich znaków diakrytycznych w identyfikatorze elementu HTML może spowodować błędy i problemy z jego poprawnym działaniem. Dlatego zaleca się unikanie ich w nazwach identyfikatorów i zamiast tego używać znaków alfanumerycznych.

Ten kod np. na "chromie" działa

<style>
  div {
    width: 0;
    height: 2em;
    background-image: linear-gradient(90deg, darkgreen 5%, lime, darkgreen 95%);
    transition: width 200ms;
  }
</style>
<div id="Wypełnienie1W"></div>

<script>
  const d = document.getElementById("Wypełnienie1W");
  let pasek = 10;
  setInterval(() => {
    d.style.width = ((pasek > 600)? pasek = 10 : pasek+=10) + "px";
  }, 150);
</script>

 

IMHO problem jest z ..., jak opisał to @ScriptyChris

Czy element o ID "Wypełnienie1W" jest w DOM w momencie, gdy skrypt się wykonuje?

Podobne pytania

0 głosów
0 odpowiedzi 188 wizyt
pytanie zadane 3 września 2019 w JavaScript przez Allen Obywatel (1,010 p.)
–1 głos
0 odpowiedzi 256 wizyt
0 głosów
0 odpowiedzi 256 wizyt

93,327 zapytań

142,325 odpowiedzi

322,396 komentarzy

62,657 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...