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

Zmiana stylu buttona przy każdym kliknięciu

Object Storage Arubacloud
0 głosów
2,386 wizyt
pytanie zadane 5 czerwca 2016 w JavaScript przez BumBumeq Nowicjusz (190 p.)
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="style.css">
    <script type="text/javascript" src="javascript.js"></script>

  </head>
  <body>
    <div class="container">
        <div class="row">
            <div class="col-sm-4">
            </div>
            <div class="col-sm-4 text-center">
                <button type="button" onclick="color()" class="btn btn-default">Click me!</button>
            </div>
            <div class="col-sm-4">
            </div>
        </div>
    </div>
    
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>
var a = 125;
var b = 125;
var c = 125;

function color() {
    
    if(a>=250) {
        a = a - 10;
    }
    else if(a<=5) {
        a = a + 10;
    }
    else {
        a = a + Math.floor(Math.random() * 5);
    }
    
    if(b>=250) {
        b = b - 10;
    }
    else if(b<=5) {
        b = b + 10;
    }
    else {
        b = b + Math.floor(Math.random() * 5);
    }
    
    if(c>=250) {
        c = c - 10;
    }
    else if(c<=5) {
        c = c + 10;
    }
    else {
        c = c + Math.floor(Math.random() * 5);
    }
    
    document.getElementsByClassName("btn-default").style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ')' + '!Important';
    
};

Button po prostu nie zmienia swoje koloru przy kliknięciu :| Bardzo proszę o pomoc

4 odpowiedzi

+2 głosów
odpowiedź 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)
wybrane 5 czerwca 2016 przez BumBumeq
 
Najlepsza
http://codepen.io/mitelak/pen/yJNZaJ
Można to zrobić na przykład tak ;) Przydałoby się tylko jeszcze losowe zmienianie + z - wylosowanej liczby, a nie że tylko się dodaje, ale takie coś chyba też spełnia swoją role :D
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
edycja 5 czerwca 2016 przez BumBumeq
Wow, bardzo dziękuję :) Teraz tylko pozostało mi dokładnie przeanalizować kod :D

#EDIT

Nie rozumiem czemu po przekopiowaniu kodu do edytora button nie zmienia koloru :p Podpiąłem css oraz js i nic :(
komentarz 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)

Ogólnie pisałem w komentarzach pod spodem, ale teraz odpowiem tak całościowo. 

  • Twój kod też by działał pod 2 zmianach. Po pierwsze getElementsByClassName("btn-default") zwraca tablicę elementów o danej klasie dlatego żeby wybrać ten konkretny button (tutaj jest on pierwszy w tablicy i ostatni zresztą) musimy zastosować etElementsByClassName("btn-default")[0] czyli tutaj wybralismy ten 1 element z tablicy.
  • Drugą rzeczą jest '!important' przy zmianie stylów
    1. Javascript doda ten style liniowo w html, czyli będzie to ważniejsze i tak od arkusza zewnętrznego więc jeżeli nie dasz wcześniej gdzieś important dla tego tła to zmieniać Ci będzie prawidłowo
    2. Nie wiem dlaczego nie działa to tutaj bo liniowo także można zastosować important :/
  • Kod już działa ale zostały 2 rzeczy do zmienienia
    • nie wywoływanie funkcji onclickiem w html tylko poprzez addEventListener https://kornel.ski/pl/onclick
    • oraz zwiększenie zakresu losowanie, bo przy 5 to te kolory praktycznie się nie różnią ;)

I to tyle :D

komentarz 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)
Podeślij mi zipa z tym jak podpiąłeś już wszystko i zobaczymy :)
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Bootstrap 101 Template</title>
 
    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="style.css">
    <script type="text/javascript" src="javascript.js"></script>
 
  </head>
  <body>
    <div class="container">
        <div class="row">
            <div class="col-sm-4">
            </div>
            <div class="col-sm-4 text-center">
                <button type="button" class="btn btn-default">Click me!</button>
            </div>
            <div class="col-sm-4">
            </div>
        </div>
    </div>
     
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>
var a = 125;
var b = 125;
var c = 125;
var btn = document.querySelector(".btn-default");

btn.addEventListener("click",function()
		 {
			 
			if(a>=250) {
				a = a - 10;
			}
			else if(a<=5) {
				a = a + 10;
			}
			else {
				a = a + Math.floor(Math.random() * 5);
			}
			 
			if(b>=250) {
				b = b - 10;
			}
			else if(b<=5) {
				b = b + 10;
			}
			else {
				b = b + Math.floor(Math.random() * 5);
			}
			 
			if(c>=250) {
				c = c - 10;
			}
			else if(c<=5) {
				c = c + 10;
			}
			else {
				c = c + Math.floor(Math.random() * 5);
			}
			 
			this.style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ')';
			 
		},false)

Rzeczywiście po takich zmianach kod działa na codepen. Gdy jednak u siebie na komputerze próbuję wyświetlić stronę button nie zmienia koloru :D

zip został wysłany na pw :)

komentarz 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)
edycja 5 czerwca 2016 przez mitelak
Ładujesz po prostu javascript w body i z tego co mi się wydaje (ekspertem od js nie jestem) to addEvenListener nasłuchuje (a przynajmniej próbuje) od razu po wczytaniu skryptu, kiedy jeszcze nie zdążyłeś złapać tego buttona javascriptem bo nie został on jeszcze stworzony. Najprostszym rozwiazaniem jest przerzucenie skryptu tam gdzie jego miejsce czyli na końcu body. Można ewentualnie sprawdzać czy jest wczytanie body i wtedy dopiero uruchamiać ten kod (tak jak document.ready w jquery) ;)

//edit tutaj przykład sprawdzania w head czy Twoje body jest gotowe do wykonywania tej funkcji http://youmightnotneedjquery.com/#ready
+1 głos
odpowiedź 5 czerwca 2016 przez Magicone Nałogowiec (45,100 p.)

>document.getElementsByClassName("btn-default")

AFAIR takie coś nie zwraca elementu, tylko listę. Proponuję odwołać się do elementu przez document.querySelector:

document.querySelector('.btn-default').style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ') !important';

 

komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
po zmianie dalej nie działa
komentarz 5 czerwca 2016 przez Magicone Nałogowiec (45,100 p.)
konsola coś rzuca?
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
var a = 125;
var b = 125;
var c = 125;

function color() {
    
    if (a >= 250) {
        a = a - 10;
    } else if (a <= 5) {
        a = a + 10;
    } else {
        a = a + Math.floor(Math.random() * 5);
    }
    
    if (b >= 250) {
        b = b - 10;
    } else if (b <= 5) {
        b = b + 10;
    } else {
        b = b + Math.floor(Math.random() * 5);
    }
    
    if (c >= 250) {
        c = c - 10;
    } else if (c <= 5) {
        c = c + 10;
    } else {
        c = c + Math.floor(Math.random() * 5);
    }
    
    document.querySelector('.btn-default').style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ') !important';
    
}

Po poprawieniu kodu na taki wyświetla tylko "Missing 'use strict' statement. if(a >= 250) {", ale wydaje mi się, że zmiana zapisu na taki nie ma znaczenia :/ 

komentarz 5 czerwca 2016 przez Magicone Nałogowiec (45,100 p.)
Spróbuj wstawić 'use strict'; w funkcję color.
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
nic to nie zmienia
komentarz 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)
edycja 5 czerwca 2016 przez mitelak
Chodzi o to żeby odpalić stronę wcisnąć Ctrl + Shift + J (w chrome) i wtedy zobaczyć w konsoli błędy. Jeżeli dodasz na początku "use strict"; to wyrzuci Ci te błędy które normalnie były pomijane też ;)

ps usuń '!important' z końca i będzie działać ;)
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
Po usunięciu !important dalej nie działa :p
+1 głos
odpowiedź 5 czerwca 2016 przez xmentor Nałogowiec (49,520 p.)
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
coś mi nie działa ten Twój kod jeżeli zamienię z moim js'em :/
komentarz 5 czerwca 2016 przez xmentor Nałogowiec (49,520 p.)
wklej ten swój cały kod na codepen i podeślij
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
Nie zadziała, bo w moim kodzie jest użyty bootstrap, którego tam nie ma :p
komentarz 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)
Na codepenie kliknij w zębatke obok CSS i tam możesz na samym dole dodać albo ręcznie link, albo z Quick-add wybrać bootstrapa (poza tym to zmienia Ci tylko wygląd więc tak naprawdę mechaniki zmiany w js nie zmieni)

ps kod kolegi działa tylko te wartości są bardzo małe i żeby zobaczyć zmiane pomiędzy odcieniami szarości trzeba się naprawdę przyjrzeć
komentarz 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)

Rzeczywiście kiedy kod umieszczę na codepen wszystko działa jak należy kiedy jest bootstrap zaś kiedy robię to u siebie na komputerze nie działa. Wydaje mi się, że js jest dobrze podpięty więc w czym tkwi problem to nie mam pojęcia.

Jeżeli chodzi o konsolę to wygląda to tak: 

komentarz 5 czerwca 2016 przez xmentor Nałogowiec (49,520 p.)
Sprawdz czy w document.querySelector masz dobrą id/klase buttona który ma zmieniać kolor, i usun z tego buttona atrybut onlick.
komentarz 5 czerwca 2016 przez mitelak Pasjonat (23,330 p.)
Już rozwiązane jak coś, ładował skrypt w head i przez to nie działało nasłuchiwanie :)
0 głosów
odpowiedź 5 czerwca 2016 przez BumBumeq Nowicjusz (190 p.)
Dziękuję wszystkim za pomoc! Jeden temat, a tyle wiedzy wpadło do mojej głowy :D Jeszcze raz bardzo dziękuję :)

Podobne pytania

0 głosów
0 odpowiedzi 313 wizyt
pytanie zadane 23 czerwca 2017 w PHP przez sapero Gaduła (4,100 p.)
0 głosów
0 odpowiedzi 192 wizyt
pytanie zadane 20 maja 2020 w JavaScript przez Klaudiaaa Początkujący (390 p.)
0 głosów
1 odpowiedź 976 wizyt
pytanie zadane 20 listopada 2018 w HTML i CSS przez Uzytkowniczka Nowicjusz (220 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...