Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwolanie sie do obiektu 'rodzica'
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
thornag
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
revyag
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);
thornag
Bb dla php uzylem bo koloruje przynajmniej keywordy 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 guitar.gif /

Z Twojej odpowiedzi nie potrafie niestety wyciagnac informacji niezbednej do naprawienia kodu 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 biggrin.gif
lopik
Odwołanie do rodzica ? parentNode

Ale zamotany ten skrypt, napisz co chcesz osiągnąć, będzie łatwiej.
revyag
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().
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.