po odoslani keyup na inpute formulara nastavit kurzor naspat na input v ktorom som pisal
- duskohu
- Člen | 778
Ahojte viete mi poradit?
Odosielam formular pri pisani do inputu formulara: pomocov ext:
len neviem ako po invalidaci znovu nastavit kurzor znovu do toho inputu ktory
poziadavku vyvolal, aby som mohol pisat dalej.
neviete poradit?
dakujem.
$.nette.ext('text-keyup', {
load: function () {
$("input:text.ajax").on('keyup', function (e) {
var $this = $(this);
if ($this.attr('value').length >= 3 || $this.attr('value').length <1) {
$form = $this.closest('form').submit();
return false;
}
});
}
});
- Vojtěch Dobeš
- Gold Partner | 1316
Chápu tu implementace správně, že se mi při psaní pod prstama ten formulář překresluje? To musí být nepříjemné k používání ne? Myslíš že by to focus spravil?
- duskohu
- Člen | 778
je to policko filtra
ked pisem do inputu odosiela sa formular, a nasledne sa invaliduje tabulka
v ktorej sa zobrazuju filtrovane udaje,
ale problem je v tom ze po invalidacii uz nemam kurzor v tom inpute v ktorom som pisal, a neviem ako ten focus tam dat, ked mam viacej inputov …
- Vojtěch Dobeš
- Gold Partner | 1316
Nechápu, proč ten input ztratí focus. To způsobí odeslání formuláře?
- duskohu
- Člen | 778
ten formular je sucastou tabulky takze sa invaliduje aj on,
a robi to vo vsetkych prehliadacoch, skusal som nieco taketo, ale takto to asi
nepojde:
$.nette.ext('text-keyup', {
load: function () {
$("input:text.ajax").on('keyup', function (e) {
var $this = $(this);
if ($this.attr('value').length >= 3 || $this.attr('value').length <1) {
$form = $this.closest('form').submit();
$this.focus();
return false;
}
});
}
});
- stefi023
- Člen | 71
Rekl bych ze focusujes, jeste pred tim nez se ti vrati odpoved z ajaxu a cely formular se prekresli, tzn focus se ztrati…
A neslo by neco jako toto? (psano z hlavy, asi si bude potreba trosku pohrat s nulovanim/podminkovani promenne this.input)
$.nette.ext('text-keyup', {
load: function () {
var _this = this;
$("input:text.ajax").on('keyup', function (e) {
var $this = $(this);
if ($this.attr('value').length >= 3 || $this.attr('value').length <1) {
$form = $this.closest('form').submit();
_this.input = $this;
return false;
}
});
},
success: function () {
this.input.focus();
}, {
input: null
}
});
Editoval stefi023 (14. 8. 2012 11:24)
- duskohu
- Člen | 778
nerozumiem preco, ale nejde to, ale kied som urobil test:
$.nette.ext('text-keyup', {
load: function () {
var _this = this;
$("input:text.ajax").on('keyup', function (e) {
var $this = $(this);
if ($this.attr('value').length >= 3 || $this.attr('value').length <1) {
$form = $this.closest('form').submit();
_this.input = $this;
return false;
}
});
},
success: function () {
alert(this.input.attr('value')); // vrati hodnotu
this.input.css("color","red"); // neprida style
this.input.focus(); // nevykona focus
}
});
- Vojtěch Dobeš
- Gold Partner | 1316
To je proto, že ten input je už dávno mrtvý… vyříznutý z DOMu. On stále existuje, ale kdesi v neviditelném éteru, v paměti prohlížeče, ale mimo stránku. Co by mohlo fungovat je najít ten samý input v již invalidavaných nových datech a replacnout ho tímhle starým.
Ideálně bych to řešil vyjmutím formuláře z tabulky nebo nějakou jemnější prací se snippety… samozřejmě za předpokladu, že to situace umožňuje.
Editoval vojtech.dobes (14. 8. 2012 15:17)
- Vojtěch Dobeš
- Gold Partner | 1316
Evangelist mission. Btw od jQuery 1.8 jsou
:text, :input
a další podobné selektory deprecated, future proof
je nahradit je standardním ekvivalentním CSS selektorem
input[type=text], input
atd.
- Vojtěch Dobeš
- Gold Partner | 1316
Četl sis můj předposlední příspěvek? Zkoušel jsi to? To by mělo zachovat obsah i focus…
- duskohu
- Člen | 778
no skusal som to, bud som to robil ze alebo to nejde,
aste som skusal takuto variantu, ale kurzor mi da na zaciatok inputu
pred text
$.nette.ext('text-keyup', {
load: function () {
var _this = this;
$("input:text.ajax").on('keyup', function (e) {
var $this = $(this);
if ($this.attr('value').length >= 3 || $this.attr('value').length <1) {
$form = $this.closest('form').submit();
_this.input = $this;
return false;
}
});
},
success: function () {
$('#'+this.input.attr('id')).focus();
//$('#'+this.input.attr('id')).val($('#'+this.input.attr('id')).val());
}
});
asi by bolo fakt najlepsie dat tabulku mimo snippetu ktory sa invaliduje,
ale problem je v tom ze mam presenter v ktorom nacitavam model
a v nom ma 2 komponenty filter a tabulku
a nacitam podla coho mam filtrovat z filtra komponenty v render
presenteru,
a tu filtrujem model a do komponenty tabulka posielam uz vyfiltrovane udaje
ale aby som mohol po odoslani formulara invalidovat snippet tabulky tak musim
volad rodica presenter a potom jeho potomka komponentu tabulku kde invalidujem
snippet, tak aby som toto nemusel tak
snippet pre filter a tabulku mam v presenteri a v nich mam komponenty filter a
tabilku a v render predenteru invalidujem naraz obe, neviem ako to urobit inak
nejaky priklad alebo manual som nikde nenasiel…
mam to asi takto:
// Presenter
public function actionDefault()
{
$this->tasksListTable=$this->context->createTasks();
}
public function renderDefault()
{
// Filtrovanie
// vezmem si parametre pre filtrovanie z komponenty
// v komponente su tieto parametre v persistentnej premenej
$filterParms = $this['taskTableFilter']->getFilterParms();
if(!empty($filterParms['priority']))
{
$this->tasksListTable->where('priority_id',$filterParms['priority']);
}
if ($this->presenter->isAjax())
{
$this->invalidateControl('taskTableFilter');
$this->invalidateControl('taskTable');
}
}
/** KOMPONENTA - Filter **/
public function createComponentTaskTableFilter()
{
$taskTableFilter = new TaskTableFilter();
$taskTableFilter->setPriorityModel($this->context->createPriority());
return $taskTableFilter;
}
/** KOMPONENTA - Task Table **/
public function createComponentExecutorIncompleteTasks()
{
$taskTable = new TaskTable($this->tasksListTable);
return $taskTable;
}
// latte presenteru
{snippet taskTableFilter}
{control taskTableFilter}
{/snippet}
{snippet taskTable}
{control executorIncompleteTasks}
{/snippet}
- Vojtěch Dobeš
- Gold Partner | 1316
Co jsem navrhoval by vypadalo takto:
success: function () {
var $newInput = $('#' + this.input.attr('id'));
$newInput.replaceWith(this.input);
// this.input.focus() ...
}