Diskuze: JQUERY select text
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
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?
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.
Čiže sa to nemá označiť po kliknutí na input, ale samo, hneď ako sa načíta value inputu zo serveru?
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.
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š.
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();
});
}
})
}
};
}).
tak z jQuery je použit $timeout a .select(), jinak jsem nebyl schopen toho docílit.
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íš.
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.
Zobrazeno 11 zpráv z 11.