Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] wykrywanie kliknięcia
Forum PHP.pl > Forum > Przedszkole
sannin
Jak wykryć kliknięcie np. na div ? Próbowałem coś z window.attachEvent, ale niestety moja wiedza jest marna :/
nieraczek
Chcesz koniecznie w zwykłym javascript ? Bo w zwykłym javascript nie pamiętam, ale jakbyś ściągnął bibliotekę jquery z tej strony: http://jquery.com/
to mógłbyś to zrobić tak:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Dokument bez tytułu</title>
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript">
  7.  
  8. $(document).ready(function() //kiedy strona zostanie zaladowana
  9. {
  10. $("#klik").click(function() //kliknieto element o id='klik'
  11. {
  12. alert("Hello world!"); //okno alertu
  13. $(this).css('color', 'yellow'); //oraz zmiana koloru na zolty
  14. });
  15. });
  16.  
  17. </head>
  18.  
  19.  
  20.  
  21. <div id="klik">Kliknij mnie</div>
  22.  
  23. </body>
  24. </html>
slawny
A może jakieś onclick?
skowron-line
google.pl ->actionListener
http://bytes.com/groups/javascript/523605-...ener-javascript tu jest podobny wątek.
sannin
Ok problem został rozwiązany, ale pojawił się inny klikam na div i innerHTML dodaje do niego 2 div i teraz jquery nie wykrywa mi klikniec na te dodane div. Myśle że to uchodzi o to że trzeba by zmienic
  1. $(document).ready( function()
na cos innego tylko na co ?
osl
nie zadużo tego kodu podałeś, ale strzelam, że powinieneś się zainteresować eventem typu Live - zerknij w dokumentacji jQuery.
sannin
Kodu nie ma za dużo więc nie ma co podawać z live nie działa

  1. $(document).live( function() {
  2. $("#anuluj").click( function() {
  3. alert('gtfv');
  4. });
  5. });';
osl
chyba nie do końca zrozumiałeś o co chodzi z live winksmiley.jpg
jeślli już to
  1. $("#anuluj").live(function() {})


$(document).ready jest uruchamiane tylko po załadowaniu strony, dlatego nie łapie nowo dodanych divów.
najlepiej pokaż jak dodajesz nowe elementy
sowiq
Bo $(document).ready() wywołuje się zaraz po załadowaniu drzewa DOM (czyli całej strony). Wtedy jQuery przypisuje Twoim div'om zdarzenie onclick. Ale później dodajesz jeszcze jednego div'a - on siłą rzeczy nie ma przypisanego zdarzenia.

Nie napisałeś co chcesz osiągnąć, ale możesz zrobić np. tak:
  1. $(document).ready( function(){
  2. $('div').click( function(){
  3. klikniecie(); // uruchomienie funkcji
  4. var ndiv = $('<div>');
  5. ndiv.click( klikniecie ); // przypisanie tego samego zdarzenia do nowego div'a
  6. $(this).append( ndiv );
  7. });
  8. });
  9. function klikniecie(){
  10. alert('Kliknieto!');
  11. }

Pisane z palca.
sannin
Osiągnąć chcę coś takiego: mam diva który wygląda jak przycisk w zdarzeniu onclick ma wywołanie funkcji dodaj(), znowu ta funkcja dodaje do innego div tresc (sprawia że on się pojawia). I teraz w tym nowo dodanym divie mam przycisk zamknij który ma wstawiac w tego diva pusta tresc (czyli go zamykac). Mój problem polega na tym że nie działa mi przycisk zamykania :/
osl
to sprawia że się pojawia czy dodaje nowego DIVa do DOM? bo to róznica winksmiley.jpg
pokaż kod funkcji dodaj(), to może znajdziemy rozwiązanie smile.gif
sannin
To jest tak funkcja
  1. function glosowanie_m(pole, pole2, div_g){
  2.  
  3. var empty = \"\";
  4. var html_m = \"<div id='test'><div class='box1'><div class='tresc1'><br /><center><span style='font-size: 12px; font-weight: normal;'>Ilość ofert: <b>o</b> od: <b>\" + document.getElementById(pole).value + \"</b> zł do: <b>\" + document.getElementById(pole2).value + \"</b> zł wymagana ilość kredytów: <b>sdf</b></span> <br /><br /> <table><tr><td style='cursor: pointer; padding: 2px; border: 1px solid #DDDDDD;'><table><tr><td><img src='_images/v.png'></td><td width='70' align='center' style='font-size: 12px; font-family: tahoma;'><b>zatwierdĽ</b></td></tr></table></td><td width='10'></td><td width='100' align='center' style='cursor: pointer; padding: 2px; border: 1px solid #DDDDDD;' id='anuluj'><table><tr><td><img src='_images/c.png'></td><td style='font-size: 12px; font-family: tahoma;'><b>anuluj</b></td></tr></table></td></tr></table></center><p class='linia'></p></div></div><p class='cien'>&nbsp;</p></div>\";
  5.  
  6. if((document.getElementById(pole).value == '' && document.getElementById(pole2).value == '') || (document.getElementById(pole).value == 'Od' && document.getElementById(pole2).value == 'Do')){
  7. alert('puste');
  8. } else {
  9. if(document.getElementById(div_g).innerHTML == ''){
  10. document.getElementById(div_g).innerHTML += html_m;
  11. }
  12. }
  13.  
  14. }


Myślałem o danium w anuluj onclick ale wtedy brakuje mi cudzysłowi i wywala bląd. Zmienna
  1. var html_m = "onclick='getElementById('anuluj')' cos tam ... "
osl
jak już zaczynasz robić w jQuery polecam reszte też przenieść na jQuery - życie jest wtedy łatwiejsze.
próbowałeś "wyeskejpować" te cudzysłowy w ostatniej linijce za pomocą "\"?

albo po prostu dodaj kod bezpośrednio w tagu z id="anuluj", coś w guście:
  1. ... id="anuluj" onclick="zamknij()"...

i dopisz funkcje zamknij().

I jeszcze jedna opcja - po dodaniu nowej zawartości przez innerHTML spróbuj dostać się do #anuluj przez jQuery
  1. $("#anuluj").click(function(){})

jedyne ryzyko przy tej opcji, że przeglądarka nie zdąży zaktualizować drzewa DOM.
sannin
ok, jakos sie wyplatałem smile.gif dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.