Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przypisanie zdarzenia onClick do input
serek
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 12.06.2011

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


Mam takie coś:

Kod
for (i=1;i<=9;i++)
{
    document.getElementById('form_ukladanka').innerHTML+='<input type="button" class="ukladanka_kratka" value="" style="width:160px; height:123px; background-color: #0f0f0f; border:0mm;" onFocus="blur(this)">';
    document.getElementsByTagName('input')[i+3].id='cba_'+i;
    document.getElementsByTagName('input')[i+3].name='kratka2_'+i;
}

W innerHTML nie mogę jako id/name ustawić tekstu razem ze zmienną, wiec muszę to robić osobno. Mam taki sam problem z zdarzeniem onClick. Chcę je przypisać do każdego z inputów i ma ono mieć w sobie zmienną "i" z pętli for, coś w stylu 'uloz_'+i. Tylko, że jak to przypisać do każdego z pól input, by funkcja wpisana w onClick zadziałała dopiero po kliknięciu na właściwy jej input, a nie od razu?

Ten post edytował serek 15.06.2011, 17:47:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
kamil4u
post
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


A jak próbowałeś?
Go to the top of the page
+Quote Post
serek
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 12.06.2011

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


Różnie (IMG:style_emoticons/default/haha.gif)
z:
document.getElementsByTagName('input')[i+3].onclick
document.getElementsByTagName('input')[i+3].addEvent
document.getElementsByTagName('input')[i+3].addEventListener

I nic, może źle to stosuję (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
kamil4u
post
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Pokaż jak próbowałeś z onclick.

W razie czego masz małą podpowiedź:
Kod
<input id="1">
<input id="2">
<input id="3">
<input id="4">
<input id="5">
<input id="6">

<script>
els = document.getElementsByTagName('input');
for(i=0; i<6; i++){
   els[i].onclick = function(){
     alert(this.id);
   }
}
</script>
Go to the top of the page
+Quote Post
serek
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 12.06.2011

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


Ehh.. a ja ciągle robiłem coś w stylu:
Kod
document.getElementsByTagName('input')[i+3].onclick=nazwa_funkcji();


Czyli powinienem zrobić tak:

Kod
for (i=1;i<=9;i++)
{
    document.getElementsByTagName('input')[i+3].onclick=function(){
    nazwa_funkcji();
    };
}


Tylko jak zapisać tą nazwę funkcji by zadziałała? Nazwa to uloz2_x, gdzie x to cyferka z pętli...

Ten post edytował serek 15.06.2011, 19:06:49
Go to the top of the page
+Quote Post
kamil4u
post
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Zrób to inaczej...
nazwa_funkcji( argument ), a nie tak jak Ty -> nazwa_funkcji_argument();

Cytat
Ehh.. a ja ciągle robiłem coś w stylu:
Kod
document.getElementsByTagName('input')[i+3].onclick=nazwa_funkcji();


Czyli powinienem zrobić tak:

I tak i nie (IMG:style_emoticons/default/smile.gif)
Kod
el.onclick = nazwa_funkcji;
//albo
el.onclick = function(){ nazwa_funkcji(); }


Pierwszy sposób( bez "()" ) stosujesz, gdy funkcja nie przyjmuje argumentów, 2 gdy funkcja przyjmuje argumenty.
2 sposób to tzn. tworzenie funkcji anonimowej

Powodzenia
Go to the top of the page
+Quote Post
serek
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 12.06.2011

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


No dobra, ale ja mam rozpisane dla każdego inputa inną funkcję: uloz2_1, uloz2_2, uloz2_3,...,uloz2_9. A ten sposób z argumentem byłby chyba tylko dobry, jeśli miałbym 1 funkcję z zadaniami dla każdego z input'ów. Czy się mylę?
Go to the top of the page
+Quote Post
kamil4u
post
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Mylisz się:
Kod
function test(x){
switch(x){
  case '1':
   break;

  case '2':
   break;
}
}


Ew. da się wywołać te Twoje funkcje w taki sposób: window['nazwa_funkcji_'+i](); ,ale to nie jest polecane.
Go to the top of the page
+Quote Post
serek
post
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 12.06.2011

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


Nom racja zapomniałem o takim sposobie, a sam go używam (IMG:style_emoticons/default/haha.gif)

Coś nie działa, pewnie znowu o czymś zapomniałem (IMG:style_emoticons/default/haha.gif)

Podstawiam do każdego inputa takie coś:
Kod
for (i=1;i<=9;i++)
{        
    document.getElementsByTagName('input')[i+3].onclick=function(){uloz2(i);};
}


I mam switch'a z alertami dla sprawdzenia czy jest ok:
Kod
function uloz2(x)
{
    switch(x)
    {
            case 1:
            alert(x);
            break;

            case 2:
            alert(x);
            break;
       }
}

Ale coś nie działa, bo się alert nie wyświetla.
Go to the top of the page
+Quote Post
kamil4u
post
Post #10





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Stary problem...
Kod
document.getElementsByTagName('input')[i+3].onclick= function(i){ return function(){ uloz2(i); }}(i);
Go to the top of the page
+Quote Post
serek
post
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 12.06.2011

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


Nadal nic.

EDIT: Ostatnia funkcja nr 9 wywołuje alert, reszta cicho siedzi... Tak samo z powyższym sposobem jak i z samym onclick=function(){ uloz2(i); };

Wymazuje z pamięci poprzednie funkcje chyba.

EDIT2: DZIAŁA!! Jak dodawanie tej funkcji jest w tej samej pętli for co innerHTML z tworzeniem inputów (więć stworzy się jeden input, doda się do niego funkcja, drugi input, funkcja, itd.), to tylko ostatni input nr 9 wywołuje funkcję z alertem, który wyświetla atrybut o wartości 9 równym temu inputowi. Jeśli dam to w osobnej pętli poniżej pętli z innerHTML, więc dodawanie funkcji zacznie się już po wygenerowaniu inputów, razem z rozwiązaniem z Twojego powyższego postu to każdy input wyświetla już swój własny alert.


Wielkie dzięki za pomoc.

Ten post edytował serek 15.06.2011, 21:34:41
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 13.10.2025 - 11:19