Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]document.querySelectorAll nie pobiera wyników
DerekDX
post 27.11.2013, 18:05:36
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


  1. <!--
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title></title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <!-- Bootstrap -->
  9. <link href="lib/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css">
  10. <link href="lib/bootstrap/css/bootstrap-responsive.css" rel="stylesheet" type="text/css">
  11. <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  12.  
  13. <!-- Load jQuery -->
  14. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
  15. </script>
  16. <!-- Load Google JSAPI -->
  17. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  18. <script type="text/javascript">
  19. var num = null;
  20. var ele = document.querySelectorAll(".btn-group > button.btn btn-primary");
  21. for (var i = 0; i < ele.length; i++) {
  22. ele[i].addEventListener("click", function() {
  23. num = +this.innerHTML;
  24. alert("Value is " + num);
  25. });
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <div class="btn-group" data-toggle="buttons-radio">
  31. <button type="button" class="btn btn-primary">Left</button>
  32. <button type="button" class="btn btn-primary">Middle</button>
  33. <button type="button" class="btn btn-primary">Right</button>
  34. </div>
  35. <script src="http://code.jquery.com/jquery.js"></script>
  36. <script src="lib/bootstrap/js/bootstrap.min.js"></script>
  37. </body>
  38. </html>


Witajcie powyżej wstawiam mój kod. Mój problem polega na tym, że funkcja document.querySelectorAll nie pobiera żadnej wartości. A powinna pobrać tablice ze wszystkimi elementami z kontenera div.btn-group
Go to the top of the page
+Quote Post
SmokAnalog
post 27.11.2013, 18:55:30
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Użyłeś nieprawidłowego selektora. Powinieneś dać:
  1. .btn-group > button.btn.btn-primary
.
Go to the top of the page
+Quote Post
DerekDX
post 27.11.2013, 19:26:38
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


  1. <!--
  2. To change this template, choose Tools | Templates
  3. and open the template in the editor.
  4. -->
  5. <!DOCTYPE html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <!-- Bootstrap -->
  10. <link href="lib/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css">
  11. <link href="lib/bootstrap/css/bootstrap-responsive.css" rel="stylesheet" type="text/css">
  12. <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  13.  
  14. <!-- Load jQuery -->
  15. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
  16. </script>
  17. <!-- Load Google JSAPI -->
  18. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  19. <script type="text/javascript">
  20. var num = null;
  21. var ele = document.querySelectorAll(".btn-group > button.btn.btn-primary");
  22. for (var i = 0; i < ele.length; i++) {
  23. ele[i].addEventListener("click", function() {
  24. num = +this.innerHTML;
  25. alert("Value is " + num);
  26. });
  27. }
  28. </script>
  29. </head>
  30. <body>
  31. <div class="btn-group" data-toggle="buttons-radio">
  32. <button type="button" class="btn btn-primary">Left</button>
  33. <button type="button" class="btn btn-primary">Middle</button>
  34. <button type="button" class="btn btn-primary">Right</button>
  35. </div>
  36. <script src="http://code.jquery.com/jquery.js"></script>
  37. <script src="lib/bootstrap/js/bootstrap.min.js"></script>
  38. </body>
  39. </html>


Kod mój zmieniłem jak powyżej. Czyli zmieniłem wartość w funkcji querySelectorAll lecz bez efektu.
Go to the top of the page
+Quote Post
SmokAnalog
post 27.11.2013, 19:40:36
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Nie działa Ci dlatego, że skrypt się wywołuje zanim drzewo DOM jest gotowe. Masz dwie możliwości:
  1. Otoczyć skrypt zdarzeniem document.onload
  2. Przesunąć cały blok skryptu na koniec strony (przed zamknięciem </body>)

Polecam sposób nr 2.
Go to the top of the page
+Quote Post
DerekDX
post 27.11.2013, 19:50:49
Post #5





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


Ehh. Zrobiłem jak piszesz. wrzuciłem cały js na dół ale nadal niepowodzenie. Moje body wygląda tak:
  1. <body>
  2. <div class="btn-group" data-toggle="buttons-radio">
  3. <tr>
  4. <td><button type="button" class="btn btn-primary">ON</button></td></tr>
  5. <tr><td><button type="button" class="btn btn-primary">ON</button></td></tr>
  6. <tr> <td><button type="button" class="btn btn-primary">ON</button></td>
  7. </tr>
  8. </table>
  9.  
  10. </div>
  11. <script src="http://code.jquery.com/jquery.js"></script>
  12. <script src="lib/bootstrap/js/bootstrap.min.js"></script>
  13. <script type="text/javascript">
  14. var num = null;
  15. var ele = document.querySelectorAll(".btn-group > button.btn btn-primary");
  16. for (var i = 0; i < ele.length; i++) {
  17. ele[i].addEventListener("click", function() {
  18. num = +this.innerHTML;
  19. alert("Value is " + num);
  20. });
  21. }
  22. </script>
  23. </body>
  24. </html>
Go to the top of the page
+Quote Post
SmokAnalog
post 27.11.2013, 19:52:34
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Bo wrzuciłeś, ale bez mojej porady w sprawie selektora biggrin.gif
Go to the top of the page
+Quote Post
DerekDX
post 27.11.2013, 19:59:51
Post #7





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


Sprawdziłem również to, ale nadal nie działa. Poniżej kod ze wszystkimi Twoimi wskazówkami

  1. <!--
  2. To change this template, choose Tools | Templates
  3. and open the template in the editor.
  4. -->
  5. <!DOCTYPE html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <!-- Bootstrap -->
  10. <link href="lib/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css">
  11. <link href="lib/bootstrap/css/bootstrap-responsive.css" rel="stylesheet" type="text/css">
  12. <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  13.  
  14. <!-- Load jQuery -->
  15. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
  16. </script>
  17. <!-- Load Google JSAPI -->
  18. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  19.  
  20. </head>
  21. <body>
  22. <div class="btn-group" data-toggle="buttons-radio">
  23. <tr>
  24. <td><button type="button" class="btn btn-primary">ON</button></td></tr>
  25. <tr><td><button type="button" class="btn btn-primary">ON</button></td></tr>
  26. <tr> <td><button type="button" class="btn btn-primary">ON</button></td>
  27. </tr>
  28. </table>
  29. </div>
  30. <script src="http://code.jquery.com/jquery.js"></script>
  31. <script src="lib/bootstrap/js/bootstrap.min.js"></script>
  32. <script type="text/javascript">
  33. var num = null;
  34. var ele = document.querySelectorAll(".btn-group > button.btn.btn-primary");
  35. for (var i = 0; i < ele.length; i++) {
  36. ele[i].addEventListener("click", function() {
  37. num = +this.innerHTML;
  38. alert("Value is " + num);
  39. });
  40. }
  41. </script>
  42. </body>
  43. </html>


Nie rozumiem tylko dlaczego w funkcji miało by być .btn-group > button.btn.btn-primary skoro w klasie css jest .btn-group > button.btn btn-primary
Go to the top of the page
+Quote Post
SmokAnalog
post 27.11.2013, 20:10:51
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Zmieniłeś HTML i teraz już selektor jest nieaktualny.
Go to the top of the page
+Quote Post
werdan
post 27.11.2013, 20:26:57
Post #9





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


http://jsbin.com/acEJOweV/1/edit
Go to the top of the page
+Quote Post
SmokAnalog
post 27.11.2013, 20:59:48
Post #10





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat(DerekDX @ 27.11.2013, 19:59:51 ) *
Nie rozumiem tylko dlaczego w funkcji miało by być .btn-group > button.btn.btn-primary skoro w klasie css jest .btn-group > button.btn btn-primary

Zapis class="klasa1 klasa2" oznacza, że masz przypisane dwie klasy do jednego elementu. Oczywiście możesz mieć ich tyle, ile chcesz. Selektor:
  1. button.btn btn-primary

Oznaczałby element o tagu btn-primary (dziwadło), który jest gdzieś wewnątrz elementu button o klasie btn. Spacja w selektorze to "element wewnątrz".

Natomiast taki selektor:
  1. button.btn.btn-primary

Oznacza element o tagu button, który ma klasę btn, jednocześnie mając klasę btn-primary.

A wracając do Twojego kodu, to używasz jQuery - może warto byłoby skorzystać z jego dobrodziejstw? Tutaj masz informację o wsparciu dla querySelectorAll: http://caniuse.com/queryselector - nie jest źle, ale w IE7 np. nie zadziała.

Lepiej, żeby zajął się tym jQuery - poniższy kod robi dokładnie to samo, co Twój:
[JAVASCRIPT] pobierz, plaintext
  1. $(".btn-group button.btn.btn-primary").click(function () {
  2. alert("Value is " + parseInt($(this).html(), 10));
  3. });
[JAVASCRIPT] pobierz, plaintext

Prawda, że prościej i przyjemniej?

Pomijam sensowność rzutowania wewnętrznego HTML-a na liczbę (u Ciebie było +this.innerHTML). Czy ten zapis był pomyłką?

Ten post edytował SmokAnalog 27.11.2013, 21:02:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2025 - 06:24