Witam, pytanie głupie z założenia aczkolwiek nie znam na nie odpowiedzi.
Jak uzyskać dostęp do zmiennej w obiekcie ?
pierwsza funkcja tworzy mi listę obiektów z którą następnie chciałbym pracować, jednak konsola wywala mi że obiekt is not defined.
Witam, pytanie głupie z założenia aczkolwiek nie znam na nie odpowiedzi.
Jak uzyskać dostęp do zmiennej w obiekcie ?
pierwsza funkcja tworzy mi listę obiektów z którą następnie chciałbym pracować, jednak konsola wywala mi że obiekt is not defined.
Pokaż kod.
a w jaki sposób odwołujesz się do tej zmiennej?
function Zawodnik(imie,index)
{
// Kod konstruktora
this.imie = imie;
this.index = index;
}
function zatwierdz()
{
var player = new Array(ilu);
for(var i=0 ; i < player.length ; i++)
{
var inputImie = document.getElementById("dv"+i);
inputImie.readOnly = true;
var imie = inputImie.value;
player[i] = new Zawodnik(imie, i);
}
}
Funkjca tworzy tablice z obiektami, teraz chciałbym dostać się do zmiennych z pozycji innej funkcji
W jaki sposób próbujesz się odwołać?
staram się wypluć imie zawodnika przez console.log(player[0].imie)
no to spróbuj console.log(player)
i zobacz co ci wyjdzie.
poza tym - w którym miejscu dokładnie wywala ci się błąd? Możliwe, że błąd jest na poziomie document.getElementById
(chyba, że to sprawdzałeś już).
"player is not defined" :D Czuje się jak idiota nie potrafiąc zrozumieć o co w tym chodzi :D
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8" />
<style>
body
{
background-color: #222222;
font-size: 24px;
color: white;
}
input[readonly] {
background: red;
}
</style>
</head>
<body>
<input type="number" id="obecni" placeholder="Ilu nas jest">
<input type="submit" value="Go !" onclick="sprawdz()"/>
<div id="zat" ></div>
<script type="text/javascript">
var maxIlu = 15;
var ilu = 0; // 10
var mainDiv = document.createElement('div');
mainDiv.id = "formularz";
document.body.appendChild(mainDiv);
function Zawodnik(imie,index)
{
// Kod konstruktora
this.imie = imie;
this.index = index;
}
function deleteElement(index)
{
index = parseInt(index);
document.getElementById("test" + index).remove();
ilu--;
if (ilu == 0) {
document.getElementById("zat").innerHTML = "";
}
}
function sprawdz()
{
mainDiv.innerHTML = "";
ilu = parseInt(document.getElementById("obecni").value);
if(ilu > maxIlu){
alert("Nie możesz dać więcej niż 15!");
return;
}
for(var i=0 ; i < ilu ; i++)
{
var div = document.createElement('div');
div.id = 'test'+i;
var zawartoscHtml = '<input type="text" id="dv' + i +'" placeholder="name">';
zawartoscHtml += '<button type="button" onclick="deleteElement('+ i +')">X</button>';
zawartoscHtml += '<button type="button" onclick="kolejny_button('+ i +')">3PT</button>';
div.innerHTML = zawartoscHtml;
mainDiv.appendChild(div);
}
}
document.getElementById("zat").innerHTML = '<button type="button" onclick="zatwierdz()">Zatwierdz</button>' ;
function zatwierdz()
{
var player = new Array(ilu);
for(var i=0 ; i < player.length ; i++)
{
var inputImie = document.getElementById("dv"+i);
inputImie.readOnly = true;
var imie = inputImie.value;
player[i] = new Zawodnik(imie, i);
}
}
function kolejny_button(numer)
{
console.log(player)
}
</script>
</body>
</html>
Cały kod
Poczytaj o zmiennych lokalnych i globalnych.
może nie tyle (nie tylko) o zmiennych lokalnych i globalnych, co o różnych zasięgach(scopes) zmiennych.
@magnusik22 , poczytaj sobie https://github.com/getify/You-Dont-Know-JS/tree/master/scope%20%26%20closures
function zatwierdz()
{
var player = new Array(ilu);
//....
}
function kolejny_button(numer)
{
console.log(player)
}
jeśli zadeklarowałeś zmienną w funkcji zatwierdz
to nie będzie ona widoczna w funkcji kolejny_button
. Możesz wyciągnąć tę zmienną poza obręb funkcji. Np.
var player;
function zatwierdz()
{
player = new Array(ilu);
//....
}
function kolejny_button(numer)
{
console.log(player)
}
document.getElementById("zat").innerHTML = '<button type="button" onclick="zatwierdz()">Zatwierdz</button>' ;
wrzucanie zatwierdz()
w onclick
to anty-wzorzec. Tak się nie powinno robić generalnie.
ten fragment nawet nie działa po wrzuceniu na jsfiddle:
https://jsfiddle.net/2n1dyzqo/
( (index):1 Uncaught ReferenceError: zatwierdz is not defined at HTMLButtonElement.onclick ((
Nie wiem co chcesz osiągnąć, ale lepiej będzie zrobić coś takiego:
var el = document.createElement('button');
el.addEventListener('click', function zatwierdz() {
// jakis kod
});
mainDiv.appendChild(el);
Dzięki wielkie, o to mi chodziło !!!!! Całość ma służyć do liczenia statystyk zawodników na meczach. Każdy zawodnik będzie mieć kilka buttonow od poszczególnych zdarzeń na boisku. Dopiero zaczynam zabawę z JS i miotam się jak we mgle ;)
Miotasz się jak we mgle bo nie znasz podstaw. Przeczytaj dokładnie i nie będziesz się miotał... przynajmniej nie aż tak na początku.