Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: e.target i firefox
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
jacek21
Witam ponownie nie mogę sobie poradzić z mozill'a, o ile w safari, operze, chromie, IE działą poprawnie o tyle w FF nie :/

problem wygląda następująco.
Mam oto taką funckję:
CODE

function wywolaj(e)
{
if(!e){e = window.event;}

var ktory = e.target || e.srcElement;
var g_z = ktory.id || ktory.className;
return g_z;
}


i chcę, żeby po każdym kliknięciu w strone sprawdzałą w jaki element klikliśmy.
No więc wywołuje sobie funkcję:

document.onclick = function()
{
wywolaj();
}

No i coś takiego wszędzie działa oprócz FF
wywala taki błąd
Kod

TypeError: e is undefined


więc podczas wywoływania funkcji dodałem: wywolaj('event');
no i o ile to pomogło z e to już w następnej lini wystąpił błąd, że ktory nie jest zdefiniowany :|
nie wiem jak się do tego zabrać na FF.

dodam, że jeśli w funkcji wywolaj dodam alert(g_z);
i wywolam ja: document.onclick = wywolaj;

to dziala poprawnie, powiedźcie mi jak wywolać tą funkcję, żeby działąła i żebym mógł sprawdzić co zwraca..
webdice
Kod
document.onclick = function( event )
{
  wywolaj( event );
}
kamil4u
Lub po po postu:
Kod
document.onclick = wywolaj;

Gdy korzystasz z tylko jednej funkcji przy tym zdarzeniu.

Co de facto sprowadza się do tego samego o czym pisze webdice, tylko jest krótsze. Generalnie zdarzenia w JS to w miarę trudny temat i, żeby je naprawdę zrozumieć musisz pisać kod, a nie tylko czytać. Mimo wszystko polecam artykuł: http://webhelp.pl/artykuly/obsluga-zdarzen-w-przegladarkach/
jacek21
Kamil co do Twojego kawałku kodu jest okey, ale nie mogłem go zastosować zbytnio do mojego skryptu(lub też po prostu nie potrafiłem). Miałem napisać, ze gdy w ten sposób wywołuje to działa, ale zaś nie mogę dostać się do tego co zwraca funkcja wywolaj smile.gif a sposób Webdice już na to pozwala smile.gif a propo nie wiedziałem, że funkcje anonimowe też mogą przyjmować parametry ;|

Szczerze mówiąc już nie wiedziałem jak do tego podejść bo próbowałem na sto sposobów, więc bardzo dziękuje za pomoc smile.gif
A i dziękuje Kamilu za link na pewno przeczytam ^^
kamil4u
Jak już przeczytasz artykuł to dowiesz się, że pierwszy pusty parametr jest odpowiedzialny za event. Dlatego możesz tak zrobić.

Cytat
nie wiedziałem, że funkcje anonimowe też mogą przyjmować parametry

Bo to jest z reguły nieprzydatne, poza zdarzeniami właśnie .

Przykład:
Kod
window.onclick = function(a,b){
    alert(a);
    alert(b);
}

window.onclick(1,2); //tylko po co wywoływać to ręcznie w praktyce to nie przychodzi mi do głowy :)

Kliknij też gdziekolwiek to zobaczysz, że pod pierwszą wolną zmienną( w tym przypadku a ) podpisze się event.

Musisz samemu popróbować, jak już pisałem, to w końcu będzie to dla Ciebie oczywiste.

Pozdrawiam
jacek21
A skoro już jest temat to miałbym jeszcze z dwa pytania, pierwsze na odpowiedzi której bardziej mi zalezy brzmi:
Co zrobić żeby pobrać oczywiście przez php $_get['id'] skoro link wygląda następująco: http://google.pl/#!strona?id=1
Z tego co czytałem indeksowanie stron w ajaxie wymaga #! a w takim przypadku $_get coś nie działa(przynajmniej mi biggrin.gif)?
jak sobie z tym radzić ?

No i drugie pytanie: istnieje jakaś funkcja/znak specjalny, który zastępuje ciąg znaków czy trzeba sobie wycinać pożądany fragment ?
przykład dajmy na tym samym linku tylko to mi przychodzi tak na szybko do glowy:

if(location.hash == 'strona'*)

*ciąg znaków w naszym wypadku: ?id=1
webdice
Ad 1. Nie da się. # i wszystko po nie jest wysłane do serwera.
Ad 2. replace?
jacek21
Czyli trzeba by pobierać wartość z klikniętego odnośnika do odpowiedeniej strony i przekazanie do pliku php, ale przez to nie działąłoby już wczytanie strony poprzez wklepanie adresu do paska url.
To jak to robić odpuścić indeksowanie dla podstron ? hmm nielogiczne ponieważ na tych podstronach(powiedzmy, ze sa to newsy) jest najwięcej niformacji, czyli co pozostaje jedynie tradycyjne wczytywanie stron przez php ? czy jest jakiś inny sposób ?

A może poprzez wycięcie id przez JS i przekazanie(ajax'em) do php ? tak to się robi ;>

skoro piszesz replace to rozumiem, że nie ma czegoś takiego smile.gif.
webdice
Tworzysz zwykły link:

  1. <a href="podstrona.html" class="ajax">Podstrona</a>


Kod
$( '.ajax' ).click( function( event )
{
  $( '.content' ).load( this.href );

  location.hash = this.href;

  event.preventDefault();
});


Możesz skorzystać też z history.pushState(), ale to już HTML5.
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.