Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Problem z pobieraniem danych z pola input
Forum PHP.pl > Forum > Przedszkole
sebap123
Mam pewien problem w skrypcie, którego jedna z funkcji jest pobieranie danych z pól input. Generalnie sprawa wygląda tak, że jest sobie napis w divie, gdzie po podwójnym kliknięciu można ten napis edytować (czyt. napis zamienia się na pole input). Problem w tym, że skrypt w ogóle nie reaguje na dodanie zdarzeń change czy blur. Na konsoli też nic nie wyświetla.
Tak dodaję zdarzenia:
Kod
function addEventSimple(obj,evt,fn) {
    if (obj.addEventListener)
        obj.addEventListener(evt,fn,false);
    else if (obj.attachEvent)
        obj.attachEvent('on'+evt,fn);
}
//(...)
addEventSimple(element,'dblclick',dd.changeText);

gdzie element to div w którym jest zwykły text przy pomocy inner HTML wprowadzony.
Tak wygląda funkcja chanegText:
Kod
changeText: function(){
            var tmp = this.innerHTML.split(/</);
            var Text = tmp[0];
            var currentText;
            if(tmp.length>0)
            {
                for(var i=1;i<tmp.length;i++)
                {
                    currentText+=tmp[i];
                }
            }
            else
                currentText = '';
//            this.innerHTML = '<input type="text" id="txt'+this.id+'" style="border:1px black dashed">';
            var element = document.createElement('input');
            element.setAttribute('id', 'txt'+this.id);
            element.setAttribute('name', 'txt'+this.id);
            element.setAttribute('type', 'text');
            this.innerHTML = '';
            this.appendChild(element);
            element.value = Text;
            element.style.border = '1px black dashed';
            var textNew = document.getElementById('txt'+this.id).value;
            removeEventSimple(this,'mousedown',dd.startDragMouse);
            removeEventSimple(this,'dblclick',dd.changeText);
            addEventSimple(document.getElementById('txt'+this.id),'change',dd.addText(document.getElementById('txt'+this.id).value,this));
        },

Tak na marginesie, to może mi ktoś wytłumaczyć, czy można używać tej za komentowanej formy wpisania napisu do diva - bo ona też działa, ale przeczytałem w jednym miejscu, że może to jest błąd - tylko nie wiem w jakim sensie.
A tak wygląda aktualnie funkcja addText:
Kod
addText: function(txt,obj,currentTxt){
            document.getElementById('label2').innerHTML = txt;
            //obj.removeChild(document.getElementById('txt'+obj.id));
//            addEventSimple(obj,'mousedown',dd.startDragMouse);

Jeszcze jedno mam pytanie, to tez próbowałem dodać do skryptu, ale już tutaj to poległem, a mianowicie w jaki sposób zrobić tak, że jak kliknę poza tym tekstem to usunie mi inputa i wróci do normalnego tekstu - czyli jak uruchomić funkcję addText, ale przez klikniecie poza polem input.
Próbowałem już
Kod
addEventSimple(document,'click',dd.addText);

Ale to nie działa, pomimo tego, że wcześniej usuwam zdarzenia dokumentu typu click tak więc nic raczej nie nadpisuje.
Będę wdzięczny za pomoc.
wNogachSpisz
daruj sobie ten wynalazek 'addsimpleevent' i użyj niezawodnego jQuery bind()
sebap123
Tak, ale w tym projekcie nie korzystam z żadnej biblioteki jak np jQuery. Dlatego takie rozwiązanie odpada.
Ma ktoś może jakieś inne pomysły?
zegarek84
Temat: JavaScript jesli Twoj watek go dotyczy KONIECZNIE przeczytaj

Kod
            element.value = Text;
            element.style.border = '1px black dashed';
            var textNew = document.getElementById('txt'+this.id).value;

po kiego grzyba potem szukasz tego inputa jak sam go tworzyłeś więc masz do niego referencję, i po kiego grzyba sprawdzasz jaki text jak sam go ustawiasz o.O
Kod
addEventSimple(document.getElementById('txt'+this.id),'change',dd.addText(document.getElementById('txt'+this.id).value,this));

poczytaj o podawaniu funkcji jako argument w zmiennych lub o scope w js - w tej chwili źle to robisz i przekazujesz... nie wiem co gdyż nie podałeś całej funkcji - coś co zwraca return lub null'a...
sebap123
@zegarek84
Masz rację z tym niepotrzebnym wyszukiwaniem elementów, poprawiłem już to, ale i tak nic.

Tutaj jest kopia tych elementów, które nie chcą działają. Wyciągnąłem je z całości skryptu Może teraz da się znaleźć jakiś błąd. Kod już maksymalnie uprościłem, żeby nic zbędnego się tam nie znalazło.
Mam nadzieję, że ktoś mi pomoże.
zegarek84
zamień to:
Kod
addEventSimple(element,'change',testObj.addText(element,this));//@todo do naprawy

na to:
Kod
addEventSimple(element,'change',function(){testObj.addText(element,this);});
sebap123
Dzięki, teraz działa.
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.