Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Ladislav Niderle:25.10.2018 8:59

Ahoj potřeboval bych poradit jak pomocí jQUERY udělat angulární directivu, která bude schopná označit text v text fieldu. Text se tam dotáhne a já ho potřebuji celý označit, ale nevím jak.

Zkusil jsem: S pomocí anguláru dělám directivu a tam jsem zkoušel už i konkrétní element.select a jiné selectory, ale nikdy mi to neoznačí daný text

Chci docílit: Snažím se docílit, aby potom co doplním nějaký text ze serveru, tak abych byl v text fieldu (input) daný value celé označit.

Předem moc děkuji za případnou pomoc či nasměrování.

 
Odpovědět
25.10.2018 8:59
Avatar

Člen
Avatar
Odpovídá na Ladislav Niderle
:25.10.2018 11:11

Máš na mysli, že dotiahneš zo serveru do input type text nejakú hodnotu a keď užívateľ na ten vyplnený input klikne, tak sa označí celý text?

 
Nahoru Odpovědět
25.10.2018 11:11
Avatar
Odpovídá na
Ladislav Niderle:25.10.2018 12:59

Ne, ze serveru mi přijdou data, která já naplním a potom potřebuji, když mám directivu na selekci, tak aby mně označil celá data. To value co jsem tam doplnil.

 
Nahoru Odpovědět
25.10.2018 12:59
Avatar

Člen
Avatar
Odpovídá na Ladislav Niderle
:25.10.2018 13:27

Čiže sa to nemá označiť po kliknutí na input, ale samo, hneď ako sa načíta value inputu zo serveru?

 
Nahoru Odpovědět
25.10.2018 13:27
Avatar
Odpovídá na
Ladislav Niderle:25.10.2018 13:32

dá se říci že ano, nevím co je dříve, zda tato direktiva nebo jiné, které se tam dají nebo focus, ale mělo by se to označit. U text fieldu se mi to už nějak povedlo, jen se to snažím naučit ještě dateField.

 
Nahoru Odpovědět
25.10.2018 13:32
Avatar

Člen
Avatar
Odpovídá na Ladislav Niderle
:25.10.2018 13:42

Tak sem daj časti kódu. Jeden kde sa ti to podarilo, nech vidím ako si na to išiel, a druhý kde ti to nefunguje, nech vidím konkrétnejšie o čo sa pokúšaš.

 
Nahoru Odpovědět
25.10.2018 13:42
Avatar
Odpovídá na
Ladislav Niderle:25.10.2018 13:51

Zde je napsaná ta direktiva:

directive('selectMe', function($timeout, $parse) {
            return {
                //scope: true,   // optionally create a child scope
                link: function(scope, element, attrs) {
                    // console.log('element', element);
                    // console.log('attrs', attrs);
                    var model = $parse(attrs.selectMe),
                        initValue = false;
                    scope.$watch(model, function(value) {
                        if(value === true) {
                            $timeout(function() {
                                initValue = true;
                                if(element[0].classList.contains('date-field')){
                                    element[0].children[0].select(); // asi nefunkční
                                }
                                else if(element[0].classList.contains('time-field')){
                                    element[0].children[0].children[0].select(); // asi nefunkční
                                }
                                else{
                                    element[0].select(); // funkční
                                }
                            });
                        } else if (value === false && initValue) {
                            $timeout(function() {
                                element[0].blur();
                            });
                        }
                    })
                }
            };
        }).
 
Nahoru Odpovědět
25.10.2018 13:51
Avatar

Člen
Avatar
Odpovídá na Ladislav Niderle
:25.10.2018 13:56

A kde je tam použité jQuery?

 
Nahoru Odpovědět
25.10.2018 13:56
Avatar
Odpovídá na
Ladislav Niderle:25.10.2018 14:18

tak z jQuery je použit $timeout a .select(), jinak jsem nebyl schopen toho docílit.

 
Nahoru Odpovědět
25.10.2018 14:18
Avatar

Člen
Avatar
Odpovídá na Ladislav Niderle
:25.10.2018 14:36

Hm. Ale jQuery nemá timeout. Jedine, že by si používal ešte aj nejaký plugin do jQuery. Čo je však naprosto zbytočné. Nie len ten plugin, ešte máš ten kód v timeout vnorený zbytočne. A select metóda nad input elementami je tiež natívna a netreba na ňu jQuery. A korunou toho je, že miešať jQuery s frameworkom ktorý tiež manipuluje DOM model, je celkovo zlý nápad... Celý tento kód tak nemá logiku:

if(value === true) {
                            $timeout(function() {
                                initValue = true;
                                if(element[0].classList.contains('date-field')){
                                    element[0].children[0].select(); // asi nefunkční
                                }
                                else if(element[0].classList.contains('time-field')){
                                    element[0].children[0].children[0].select(); // asi nefunkční
                                }
                                else{
                                    element[0].select(); // funkční
                                }
                            });
                        } else if (value === false && initValue) {
                            $timeout(function() {
                                element[0].blur();
                            });
                        }
                    })
                }

A last but not least, element.select() metóda funguje LEN S input type text a textarea. Takže vynechaj timeout, vynechaj pokusy použiť select nad date či time inputmi a malo by to fungovať. Skús a napíš.

 
Nahoru Odpovědět
25.10.2018 14:36
Avatar

Člen
Avatar
:25.10.2018 15:07

Tak som sa pozrel do dokumentácie a je to tak. $timeout je AngularJS servis, a select() he natívna JS metóda nad vhodnými inputmi, oboje nemá nič spoločné s jQuery a zdá sa, že všetko čo robíš zle, je že sa pokúšaš o select nad nevhodnými inputmi. Neviem to určite, nevidel som celý kód, usudzujem to len z tých tried date-field a time-field.

 
Nahoru Odpovědět
25.10.2018 15:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.