Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odwolanie sie do obiektu 'rodzica'
thornag
post
Post #1





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Witam.

Mam taki oto kod.

  1. <?php
  2. this.oDebug = document.getElementById('debug');  
  3.  
  4. this.sDragableClassName = 'drag';
  5.  
  6. alert(this.oDebug);
  7.  
  8. this.OnMouseDown = function(oElement) {
  9. if (oElement == null) { 
  10. oElement = window.event;
  11. }
  12.  
  13. alert('przed');
  14.  
  15. var oTarget = oElement.target != null ? oElement.target : oElement.srcElement;
  16.  
  17. alert('po');
  18.  
  19. alert(this.oDebug);
  20. ?>


Wlasciwosc oDebud przechowuje mi diva, chcialbym sie do niego odwolac z metody obiektu, jednak jak zdazylem zauwazyc uzywanie slowa kluczowego this. nie odnosci skutku gdyz this dla metody jest juz odwolaniem do metody samej w sobie. Efekt tego taki ze pierwszy alert podaje mi prawidlowo diva drugi juz niestety undefined.

Stad pytanie, w jaki sposob moge sie odwolac do wlasciwosci 'klasy/obiektu' (jesli mozna to tak nazwac) z metody owego obiektu/klasy ?

Calosc znajduje sie tutaj

Ten post edytował thornag 25.01.2007, 14:06:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
revyag
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Używaj poprawnego bbcode.

Co do problemu:

this jest refrencją do kontenera. Aby wszystko działało musisz jeszcze podać obiekt (div) bo metodę robisz dla niego, a nie dla kontenera.
zamiast:
Kod
this.OnMouseDown

to:
Kod
this.oDebug.OnMouseDown


poza tym:
Kod
alert(this.oDebug);
takie coś nie przejdzie bo odwołujesz się z metody obiektu, więc referencją do obiektu z wewnątrz metody będzie this.
Kod
alert(this);
Go to the top of the page
+Quote Post
thornag
post
Post #3





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Bb dla php uzylem bo koloruje przynajmniej keywordy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Co do problemu.

Ja nie tworze tej metody dla diva. Mam sobie obiekt DragAndDrop, i on ma wlasiwosc oDebug (czyli ten Div), w srodku metody OnMouseDown chce sobie to tylko zdebugowac. Pozatym nie tylko o to chodzi. DragAndDrop ma tez wlasciwosc this.DragableClassName, i w metodzie OnMouseDown chce skorzystac z tej wlasciwosci poprzez this.DragableClassName - undefined. Stad wniosek ze w OnMouseDown uzycie this. wskazuje juz na OnMouseDown, co smieszne w innym skrypcie tez tak robilem i dziala (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif) /

Z Twojej odpowiedzi nie potrafie niestety wyciagnac informacji niezbednej do naprawienia kodu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Moze postaram sie jeszcze prosty przyklad podac.

Kod
function A() {
  this.Property = 'string';

  this.Method = function(element) {
        var target = element.target;
        if(target.className == this.property) return true;
        return false;
  }

  document.onmousedown = this.Method;
}


teraz kiedy stworze diva z klasa string to przy kliknieciu nigdy nie zwroci mi to true poniewaz wewnatrz metody Method this.property ma wartosc undefined.

Troche to zamotane ze mnie jest z tymi kontenerami. Jakbym mogl prosic jeszcze raz jak do dziecka albo jakis dobry tutorial (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował thornag 25.01.2007, 14:34:19
Go to the top of the page
+Quote Post
lopik
post
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 7.07.2006

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


Odwołanie do rodzica ? parentNode

Ale zamotany ten skrypt, napisz co chcesz osiągnąć, będzie łatwiej.

Ten post edytował lopik 27.01.2007, 16:21:37
Go to the top of the page
+Quote Post
revyag
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Problem wydaje się być taki, że this nie referuje do obiektu tylko do dokumentu. Nie zagłębiałem się w to dokładniej, ale rozwiążesz to wyrzucając metody odwołujące się do pól obiektu poza obiekt,wiem że to zamotane, ale innego wyjścia chyba nie masz.

Kod
<script type="text/javascript">
function TCore_DragAndDropObject() {
    this.iStartX = 0;            
    this.iStartY = 0;
    this.iOffsetX = 0;
    this.iOffsetY = 0;
    this.oDragElement;          
    this.iOldZIndex = 0;  
    this.oDebug = document.getElementById('debug');  
    this.sDragableClassName = 'DragableElement';
}
function init() {
    var oDragAndDrop = new TCore_DragAndDropObject;
    document.onmousedown=function(e) {
    if (!e) {
        e = window.event;
    }
    var oTarget = e.target != null ? e.target : e.srcElement;
    oDragAndDrop.oDebug.innerHTML = oTarget.className == this.sDragableClassName ? 'dragable' : 'dragable'    
    }
}

a potem wywołasz tylko init().
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: 23.08.2025 - 14:24