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

Wartość z inputa potrzebna do różnych funkcji

VPS Starter Arubacloud
0 głosów
851 wizyt
pytanie zadane 7 października 2016 w JavaScript przez PieroQQ Początkujący (420 p.)
W htmlu mam inputa typu number. Wpisuję do niego liczbę, która jest odczytywana po wciśnięciu guzika i funkcja według tej liczby generuje odpowiednią zawartość strony. W chwili generowania zawartości input znika. Potem potrzebuję ponownie dostać się do tej liczby ponieważ jest ona potrzebna do działania innej funkcji, w jaki sposób zrobić zmienną z której można korzystać globalnie ale jej wartość będzie taka jaką przypisała poprzednia funkcja?
komentarz 7 października 2016 przez ScriptyChris Mędrzec (190,190 p.)

Podaj kod, to ułatwi pomoc => http://forum.pasja-informatyki.pl/faq#jak-wstawic-kod-zrodlowy

w jaki sposób zrobić zmienną z której można korzystać globalnie

Np. w ten sposób:

var myData = '';

function foo() {
   myData = 'Hello';
}

function bar() {
  myData = 'World';
}

foo();
console.log( myData ); // Hello

bar();
console.log( myData ); // World

 

komentarz 7 października 2016 przez PieroQQ Początkujący (420 p.)
edycja 7 października 2016 przez ScriptyChris
<div id="liczba_pytan">Ile chcesz zadan? <input type="number" id="ile"/> <input type="submit" value="zatwierdz" onclick="pytania()"/> </div>

 

Ta liczba jest wykorzystywana to wygenerowania odpowiedniej liczby pytan. I potem w innej funkcji wyświetlenia po kolei odpowiedzi na każde pytanie, dlatego potrzebuję tej liczby, do tej 2 pętli gdy użytkownik już odpowie na pytania i je zatwierdzi 

 

function pytania()
{
	
	var tresc_diva="";
	var l_pytan= $("#ile").val();
	if(l_pytan>0)
	{
		for(i=0 ;i<l_pytan;i++)
	{
	tresc_diva = tresc_diva + '<div class="ask"> <div class="window"> Pytanie nr '+(i+1)+' </div> <div class="window" onclick="zmiana_styluA('+i+')" id="pytanieA'+i+'">A</div> <div class="window" onclick="zmiana_styluB('+i+')" id="pytanieB'+i+'" >B</div><div class="window" onclick="zmiana_styluC('+i+')" id="pytanieC'+i+'">C</div><div class="window" onclick="zmiana_styluD('+i+')" id="pytanieD'+i+'">D</div></div> '
	}
	var exam_end='<div id="koniec" onclick="Wyniki()"> Kliknij aby zakonczyc egzamin</div>';
	var ask_delete='Egzamin zrobiony z '+l_pytan+ ' zadan <br></br> <div id="return" onclick="location.reload()">Kliknij aby wybrac opcje ponownie </div> ' ;
	
	$("#sprawdzian").html(tresc_diva);
	$("#exam_end").html(exam_end);
	$("#liczba_pytan").html(ask_delete);
	}	
}

function Wyniki()
{
	var wyniki = "";
	for(i=0;i<ilosc;i++)
	{
		wyniki = wyniki+odpowiedz[i]+" ";
	}
	alert(wyniki);
}
komentarz 7 października 2016 przez ScriptyChris Mędrzec (190,190 p.)

Przekaż zatem ilość pytań jako parametr:

var exam_end='<div id="koniec" onclick="Wyniki( l_pytan )"> // przekazuje zmienną "l_pytan" do funkcji

I dodaj ją jako argument w funkcji Wyniki():

function Wyniki( ilosc ) // argument "ilosc", z którego korzystasz już w pętli
{
  /** tu kod */

}

"Tradycyjnie" wałkowany temat - EventListener zamiast onclick. Dodatkowo, w pętlach stosuj zmienne lokalne, czyli for ( var i = 0 ...)

komentarz 7 października 2016 przez PieroQQ Początkujący (420 p.)
Jak napisałem dopiero zaczynam i jeszcze nie wiem nawet co to jest addeventlistener ale dziś o tym poczytam, przekazanie tego parametru w sposób który napisałeś nie działa ponieważ l_pytan jest tylko w tej funkcji, wykonuje się i znika i gdy już skonczonym egzaminie klikam Zakonczenie egzaminu, które powinno wysłać l_pytan w konsoli wyskakuje błąd  Uncaught ReferenceError: l_pytan is not defined
komentarz 7 października 2016 przez ScriptyChris Mędrzec (190,190 p.)

Przepraszam, poprawka - trzeba dodać znaki escape:

var exam_end='<div id="koniec" onclick="Wyniki( \'' +  l_pytan + '\'  )"> Kliknij aby zakonczyc egzamin</div>';

Jeśli dalej nie zadziała, to masz bodziec, aby nie brnąć dalej w onclick :)

Próbowałeś to zrobić tak, jak pokazałem w pierwszym komentarzu?

komentarz 7 października 2016 przez PieroQQ Początkujący (420 p.)
Oh, zapomniałem odpisać. Teraz wszystko działa tylko jeszcze nie rozumiem jak i co zmieniły te znaki

1 odpowiedź

0 głosów
odpowiedź 7 października 2016 przez Comandeer Guru (599,730 p.)
Zrobić sobie osobny scope i tam obsługiwać wszystko?
komentarz 7 października 2016 przez PieroQQ Początkujący (420 p.)
Możesz dokładnie wyjaśnić albo polecić stronę gdzię mogę o tym przeczytać, jestem nowy w js'ie
komentarz 7 października 2016 przez Comandeer Guru (599,730 p.)
1
komentarz 7 października 2016 przez PieroQQ Początkujący (420 p.)
Dzięki, zaraz postaram się zrozumieć :D
komentarz 7 października 2016 przez ScriptyChris Mędrzec (190,190 p.)
document.querySelector( '#button1' )

Czyli jednak document.querySelector( '#' + id ) jest lepsze od document.getElementById( id )? Czy po prostu tak Ci się napisało / to kwestia przyzwyczajenia (lub wygody) / przy pobieraniu ID to jest bez znaczenia? :)

komentarz 7 października 2016 przez Comandeer Guru (599,730 p.)

Prawdę mówiąc zwykle używam getElementById. Musiałbym potestować jakie są dokładnie różnice.

komentarz 7 października 2016 przez niezalogowany

( getElementById jest szybsze o ~12% na Chromie : D )

komentarz 7 października 2016 przez Comandeer Guru (599,730 p.)
Nie dziwi mnie to. Narzut silnika CSS i statycznej kolekcji jednak da się odczuć.

Podobne pytania

0 głosów
1 odpowiedź 697 wizyt
pytanie zadane 28 czerwca 2016 w JavaScript przez n0s1gnal Użytkownik (700 p.)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 25 grudnia 2018 w JavaScript przez Kijoszi Początkujący (330 p.)
0 głosów
2 odpowiedzi 233 wizyt

92,454 zapytań

141,262 odpowiedzi

319,097 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...