Size: a a a

2020 September 13

AP

Alexander Ponomarev in Svelte [svelt]
очень странное решение которое непонятно почему работает
источник

МТ

Марк Танащук... in Svelte [svelt]
Alexander Ponomarev
очень странное решение которое непонятно почему работает
Кроме таймаута проще вариант существует?
источник

AP

Alexander Ponomarev in Svelte [svelt]
да меня не интересует простота варианта, меня интересует какого черта оно работает, а то что написал radimir не работает =)
источник

МТ

Марк Танащук... in Svelte [svelt]
Alexander Ponomarev
да меня не интересует простота варианта, меня интересует какого черта оно работает, а то что написал radimir не работает =)
Хрен знает =\
источник

AP

Alexander Ponomarev in Svelte [svelt]
хорошая либа, все предсказуемо и понятно
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Мне кажется лучше вместо дисплей нона обернуть в иф а фокус сделать на экшене
источник

КС

Кирилл Спасибович... in Svelte [svelt]
const focus = node => node.focus();

input use:focus
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Либо setTimeout, либо getComputedStyle, в общем проблема та же, что синхронный код не дожидается рендера инпута
источник

МТ

Марк Танащук... in Svelte [svelt]
Отличия:

Изначальный откомпиленный код radimir:

dispose = listen(button, "click", /*toggle*/ ctx[2]);

Инстанс:
function toggle() {
 $$invalidate(0, active = !active);
 inputEl.focus();
}

Мой вариант

dispose = [
 listen(button, "click", /*click_handler*/ ctx[2]),
 listen(button, "click", function () {
   if (is_function(/*inputEl*/ ctx[1].focus())) /*inputEl*/ ctx[1].focus().apply(this, arguments);
 })
];

Инстанс:
const click_handler = () => $$invalidate(0, active = !active);
источник

r

radimir in Svelte [svelt]
setTimeout не помогает - только два последовательных обработчика события
источник

МТ

Марк Танащук... in Svelte [svelt]
Марк Танащук
Отличия:

Изначальный откомпиленный код radimir:

dispose = listen(button, "click", /*toggle*/ ctx[2]);

Инстанс:
function toggle() {
 $$invalidate(0, active = !active);
 inputEl.focus();
}

Мой вариант

dispose = [
 listen(button, "click", /*click_handler*/ ctx[2]),
 listen(button, "click", function () {
   if (is_function(/*inputEl*/ ctx[1].focus())) /*inputEl*/ ctx[1].focus().apply(this, arguments);
 })
];

Инстанс:
const click_handler = () => $$invalidate(0, active = !active);
Собственно мне кажется что мой вариант работает либо из-за синхронности js'а либо из-за этой строки вместо исполнения кода в инстансе

if (is_function(/*inputEl*/ ctx[1].focus())) /*inputEl*/ ctx[1].focus().apply(this, arguments);
источник

КС

Кирилл Спасибович... in Svelte [svelt]
radimir
setTimeout не помогает - только два последовательных обработчика события
Мне помогло на андроидовском ff, а как ты используешь setTimeout ?
источник

r

radimir in Svelte [svelt]
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Гы
setTimeout(() => input.focus());
источник

r

radimir in Svelte [svelt]
Ну ок.
источник

P

Pavel in Svelte [svelt]
Драгула тормозит на телефонах
источник

r

radimir in Svelte [svelt]
Кирилл, Марк, Володя 11 лет - спасибо )
источник

ON

Oleg N in Svelte [svelt]
Марк Танащук
Хрен знает =\
потому что 2-й евент срабатывает после инвалидации от первого евента
источник

МТ

Марк Танащук... in Svelte [svelt]
Oleg N
потому что 2-й евент срабатывает после инвалидации от первого евента
Собсно как я и понял - из-за синхронной отработки кода
источник

ON

Oleg N in Svelte [svelt]
Марк Танащук
Собсно как я и понял - из-за синхронной отработки кода
она ассинхронная (через промис), но у промиса видимо приоритет выше чем у евентов
источник