Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: JavaScript z poziomu PHP
Forum PHP.pl > Forum > XML, AJAX
qbas-s
Mam sobie w index.php taki blok
  1. <div id="error" class="off">
  2.  
  3. </div>


w css to wyżej jest zdefiniowane tak:

#error{
position: absolute;
width: 312px;
height: 240px;
left: 400px;
top: 200px;
}
.off{}
.error_window{
background-image: url(img/error_window.png);
}


Do index za pomocą AJAX wczytuję pewien skrypt php w którym są instrukcję warunkowe.
w jednej z tych instrukcji chciałbym aby nazwa klasy powyższego diva się zmieniła.
Do tego potrzebne jest mi wywołanie nast js w php:

function error_window(divID)
{
var el = document.getElementById(divID);
el.className='error_window';
}

to co aktualnie mam w interesującej mnie instrukcji warunkowej php to:
  1. <?php
  2. echo "<script type=\"text/javascript\"> error_window('error') </script>";
  3. echo $error;
  4. ?>

I tu pytanie dlaczego wywołanie js w echo mi nie działa? echo $error wyświetla się tam gdzie trzeba.
Wszystko ma działać asynchronicznie.

Pozdrawiam
wookieb
Zapodaj to publicznie bo raczej wywołujesz skrypty w złej kolejności.
qbas-s
jak to publicznie? jak wywołam to w innej kolejności to nie będzie spełniać zadania. className ma się zmieniać zależnie od wartości przekazanej do instrukcji warunkowej php
Kildyt
Ale jak to się nie wyświetla? Może po prostu nie widzisz efektu? Wydaje mi się, że w kodzie js zapomniałeś dodać średnika.
qbas-s
efekt byłby widoczny. Zrobiłem test i odrazu przy ładowaniu index ładował się div tylko poprostu zmieniłem na <div id="error"> i w css to co w klasie przeniosłem do #error i efekt był. w skrypcie ze średnikiem też próbowałem - on nie jest konieczny
#luq
Kod
el.className='error_window';

Jedynie IE posiada właściwość className. Reszta popularnych przeglądarek posiada właściwość class, aczkolwiek nie wiem czy className nie działa w nich także poprawnie.

Poza tym wydaje mi się, że masz to źle zaprojektowane. Czy nie można w Twoim wypadku zrobić tak:

Ajax wczytuje jakiś plik php, on się wykonuje i zwraca wyniki, zamiast
  1. <?php
  2. echo "<script type=\"text/javascript\"> error_window('error') </script>";
  3. echo $error;
  4. ?>

samo
  1. <?php
  2. echo $error;
  3. ?>

A wykonaniem funkcji error_window('error') zajmuje się JS w oparciu o readyState == 4
qbas-s
dzięki #luq Twoje rozwiązanie działa- oczywiście sog dla Ciebie:)
Jednak co do nie działania className w innych przeglądarkach niż IE się nie zgodzę.
Mam np taki skrypt który sprawdza jaka jest rozdzielczość ekranu i w zależności od wyniku za pomocą className zmienia wartość class div'a i to działa.
#luq
Być może. Tak jak napisałem:
Cytat
aczkolwiek nie wiem czy className nie działa w nich także poprawnie.

W specyfikacji jest chyba .class (nie chce mi się tego teraz sprawdzać).
Kiedyś pisałem coś i wykorzystałem właściwość .class wszędzie śmiłago dobrze tylko nie pod IE bo tam jest .className stąd moja uwaga.
erix
Cytat
W specyfikacji jest chyba .class (nie chce mi się tego teraz sprawdzać).

Wszędzie jest className. [;
#luq
Masz rację erix. Sprawdzałem winksmiley.jpg
class jest słowem zarezerwowanym na kolejne wersje ECMAScript.
qbas-s
#luq to co doradziłeś mi działa ale nie osiągnąłem do końca zamierzonego efektu.
Funkcja error_window po naciśnięciu rejestruj wykonuje się w obrębie readyState == 4.
Czyli wykona się niezależnie od tego czy wystąpił błąd w formularzu rejestracyjnym czy nie.
Ona musi się dlatego wykonać w skrypcie php razem z echo $error; i zmienić class tego diva.
Czyli znowu jestem na początku:/
#luq
A co za problem napisać tak:
Kod
if( oRequest.readyState == 4 ){
    if( oRequest.responseText ){
        error_window('error');
    }
}


Wtedy gdy $error == '' nic się nie stanie
qbas-s
Dzięki o to mi chodziło:)
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.