Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde
Avatar
niderle.l
Člen
Avatar
niderle.l:25. října 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. října 8:59
Avatar
Odpovídá na niderle.l
Vladislav Ladicky:25. října 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. října 11:11
Avatar
niderle.l
Člen
Avatar
Odpovídá na Vladislav Ladicky
niderle.l:25. října 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. října 12:59
Avatar
Odpovídá na niderle.l
Vladislav Ladicky:25. října 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. října 13:27
Avatar
niderle.l
Člen
Avatar
Odpovídá na Vladislav Ladicky
niderle.l:25. října 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. října 13:32
Avatar
Odpovídá na niderle.l
Vladislav Ladicky:25. října 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. října 13:42
Avatar
niderle.l
Člen
Avatar
Odpovídá na Vladislav Ladicky
niderle.l:25. října 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. října 13:51
Avatar
Odpovídá na niderle.l
Vladislav Ladicky:25. října 13:56

A kde je tam použité jQuery?

 
Nahoru Odpovědět 25. října 13:56
Avatar
niderle.l
Člen
Avatar
Odpovídá na Vladislav Ladicky
niderle.l:25. října 14:18

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

 
Nahoru Odpovědět 25. října 14:18
Avatar
Odpovídá na niderle.l
Vladislav Ladicky:25. října 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. října 14:36
Avatar
Vladislav Ladicky:25. října 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. října 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.