Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze zdarzeniem change(onchane)/blur(onblur)
sebap123
post
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Mam problem w skrypcie i prawdę powiedziawszy, nie wiem jaka jest jego przyczyna. W konsoli nic nie pojawia się żaden błąd, a skrypt i tak nie chce działać. Chodzi o to, że mam w skrypcie taką instrukcje:
Kod
newRow.innerHTML += '<br>Kolor:<input type="text" class="color" id="c'+ddList.ddEl.id+'" name="c'+ddList.ddEl.id+'" size=6>';
            var myPicker = new jscolor.color(document.getElementById('c'+ddList.ddEl.id), {});
            addEventSimple(document.getElementById('c'+ddList.ddEl.id),'blur',ddList.setColor(document.getElementById('c'+ddList.ddEl.id).value,ddList.ddEl));

i funkcje:
Kod
function addEventSimple(obj,evt,fn) {
    if (obj.addEventListener)
        obj.addEventListener(evt,fn,false);
    else if (obj.attachEvent)
        obj.attachEvent('on'+evt,fn);
}

Kod
setColor: function(txt,obj){
        document.getElementById('label1').innerHTML = txt;
    },

Chciałbym, aby po zmianie zawartości pola input text zmienił się napis w polu label1 na wybrany numer koloru (korzystam tutaj z biblioteki jscolor. Według mnie wszystko jest dobrze napisane, ale w ogóle nie chce działać. Pojawia się tylko raz napis w momencie inicjalizacji i potem się nie zmienia.
Ma ktoś może jakiś pomysł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


To nie ma prawa działać, ponieważ zastosowanie atrybutu innerHTML nie wpływa na zmianę struktury DOM dokumentu HTML. Oznacza to tyle, że Twój element input, do którego próbujesz się później odwołać w funkcji getElementById istnieje w dokumencie HTML tylko jako tekst, a nie jako element struktury DOM. Rozwiązania są dwa:
1. zastosowanie biblioteki JavaScript (jQuery, Prototype, Dojo, itp.) - większość z nich ma odpowiednie metody, które modyfikują strukturę DOM,
2. stworzenie elementu input obiektowo i dodanie (appendChild) go do już istniejącego elementu struktury DOM:
[JAVASCRIPT] pobierz, plaintext
  1. var text = document.createTextNode("<br>Kolor:");
  2. newRow.appendChild(text);
  3. var element = document.createElement('input');
  4. element.setAttribute('id', 'c'+ddList.ddEl.id);
  5. element.setAttribute('name', 'c'+ddList.ddEl.id);
  6. element.setAttribute('type', 'text');
  7. element.setAttribute('class', 'color');
  8. element.setAttribute('size', '6');
  9. newRow.appendChild(element);
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
sebap123
post
Post #3





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Ok, dzięki za podpowiedź, tego nie wiedziałem. Zmieniłem tak jak napisałeś:
Kod
newRow.innerHTML += '<br>Kolor:';
            var element = document.createElement('input');
            element.setAttribute('id', 'c'+ddList.ddEl.id);
            element.setAttribute('name', 'c'+ddList.ddEl.id);
            element.setAttribute('type', 'text');
            element.setAttribute('class', 'color');
            element.setAttribute('size', '6');
            newRow.appendChild(element);
            var myPicker = new jscolor.color(element, {});
            addEventSimple(element,'blur',ddList.setColor(element.value,ddList.ddEl));

Ale nadal nie wyświetla się tekst w momencie zmiany zawartości pola - nie ma tutaj znaczenia, czy jest to change, czy blur.
Co jeszcze może być nie tak?

Czy może mi ktoś coś doradzić?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 20:00