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

Funkcja po kliknięciu wykonuje się tylko raz

0 głosów
372 wizyt
pytanie zadane 18 grudnia 2017 w JavaScript, jQuery, AJAX przez xxkondzioxx15 Obywatel (1,370 p.)

Witam, mam pewien problem, zrobiłem sobie tabelkę, która pa kliknięciu w pole zmienia kolor za każdym kliknięciem. Chcę, aby funkcja wykonała się tylko raz. Jak mogę to zrobić?

<script>
		var tb1 = null;
		//var g =Math.round(Math.random()*255);
		//var b =Math.round(Math.random()*255);
		function hookTable(){
			tb1 = document.getElementById("main");
				if ( tb1 !== null){
                  for (var i = 0; i < tb1.rows.length; i++){
					for (var j=0; j < tb1.rows[i].cells.length;j++){
						tb1.rows[i].cells[j].onclick = function() { getVal(this); };
					}
				  }
                }
             }
		function getVal(cel) {
			//alert(cel.innerHTML);
			var g =Math.round(Math.random()*255);
			var b =Math.round(Math.random()*255);
            cel.style.color="rgb(255,0,0)";
			if (cel.innerHTML==="1"){
                cel.style.backgroundColor="rgb(0,"+g+",0)";
				return;
			}else{
				cel.style.backgroundColor="rgb(0,0,"+b+")";
			}
            }
			
	</script>

<body onload="hookTable();">
	
<?php
$len = 10;
echo '<table id="main">';
for($i = 0; $i <$len; $i++){
echo "<tr>";
for ($j= 0; $j < $len; $j++){
    echo '<td>'.mt_rand(0,1).'</td>';
    }
    echo "</tr>";
}
echo "</table>";
?>

</body>

Z góry dziękuję.

1 odpowiedź

+1 głos
odpowiedź 18 grudnia 2017 przez Comandeer Mentor (458,640 p.)

W nowoczesnych przeglądarkach jest coś takiego jak addEventListener options i jedną z nich jest oncehttps://developers.google.com/web/updates/2016/10/addeventlistener-once

komentarz 18 grudnia 2017 przez xxkondzioxx15 Obywatel (1,370 p.)
A gdzie tą funkcję mogę dopisać w tym kodzie?. A nie mogę gdzieś dodać return;?
komentarz 18 grudnia 2017 przez Comandeer Mentor (458,640 p.)

A gdzie tą funkcję mogę dopisać w tym kodzie?

Zastąpić onclick.

 A nie mogę gdzieś dodać return;?

Samo return nie, ale można zastosować technikę z flagą:

var flag = false;

element.addEventListener( 'click, function() {
    if ( flag ) {
        return;
    }

    flag = true;
} );

 

komentarz 18 grudnia 2017 przez xxkondzioxx15 Obywatel (1,370 p.)

Tak ma to wyglądać?

for (var j=0; j < tb1.rows[i].cells.length;j++){
						tb1.rows[i].cells[j].element.addEventListener = function() { getVal(this); };
						
					}

To mi nie działa

komentarz 18 grudnia 2017 przez Comandeer Mentor (458,640 p.)

Twoim element jest tb1.rows[i].cells[j]. Poza tym zobacz, jaką składnię ma addEventListener.

komentarz 18 grudnia 2017 przez xxkondzioxx15 Obywatel (1,370 p.)

w tym problem że ma dodatkowe opcje ten addEventListener once i nie potrafię tego dostosować do tej funkcji

komentarz 18 grudnia 2017 przez xxkondzioxx15 Obywatel (1,370 p.)
po prostu nie wiem jak to dopasować

Podobne pytania

0 głosów
2 odpowiedzi 99 wizyt
0 głosów
1 odpowiedź 63 wizyt
0 głosów
1 odpowiedź 85 wizyt
pytanie zadane 22 października 2018 w JavaScript, jQuery, AJAX przez Brzeczy Początkujący (280 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

65,663 zapytań

112,292 odpowiedzi

236,952 komentarzy

46,650 pasjonatów

Przeglądających: 253
Pasjonatów: 11 Gości: 242

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...