|
Как отловить событие в contenteditable? JavaScript, HTML | ☑ | ||
---|---|---|---|---|
0
Патчкорд
21.01.14
✎
08:33
|
Как отловить событие окончания редактирования в contenteditable?
Например, пользователь поставил курсор в блок с "contenteditable", потом убрал, ничего не должно произойти, но если пользователь поставил курсор в блок contenteditable и что-то изменил, а потом убрал курсор в другое место (т.е. значит закончил редактировать), то должно сработать событие. Пример который не работает: http://jsfiddle.net/uebSB/3/ ЗЫ: Как просил модератор, оформил сабж с указанием языка. |
|||
1
Патчкорд
21.01.14
✎
09:13
|
Ап
|
|||
2
Котокот
21.01.14
✎
09:29
|
(0) keydown, keyup с пасет отца демократии
http://jsbin.com/owavu3/1/edit |
|||
3
Патчкорд
21.01.14
✎
12:55
|
(2) Не помогло. Не срабатывает событие при окончании редактирования.
|
|||
4
Патчкорд
21.01.14
✎
13:06
|
Похоже никак легко не сделать. Придется писать громоздкий говнкод.
|
|||
5
Котокот
21.01.14
✎
13:06
|
(3) Дорабатывай скрипт. Привяжись к движению мыши. Отслеживай последний измененный contenteditable: если после изменения одного из них при следующем нажатии клавиши активный элемент уже не этот contenteditable, значит редактирование завершено. Ну и т.д.
|
|||
6
Патчкорд
21.01.14
✎
13:12
|
(5) не, слишком сложно и не красиво. Было бы что-нибудь подобное oninput
|
|||
7
kokamoonga
21.01.14
✎
14:03
|
(6)
Пример с keydown/keyup http://jsfiddle.net/uebSB/6/ Событие получения фокуса элементом - onFocus Событие потери фокуса - onBlur Но для отлова редактирования они не особо нужны. |
|||
8
kokamoonga
21.01.14
✎
14:21
|
(0) (6) теоретически отслеживание изменения по focus/blur может выглядеть так: http://jsfiddle.net/uebSB/7/
|
|||
9
Патчкорд
22.01.14
✎
05:55
|
(8) ну да, как-то так вроде самый короткий вариант. Ничего лучше придумать не получается.
|
|||
10
kokamoonga
23.01.14
✎
01:33
|
(9) Короче вряд ли получится, если речь идет о назначении обработчиков событий. Конечно после прохода Google Closure Compiler можно получить что-то вроде:
(function(){$("#target");var a=$(".source"),b;a.on("focus",function(){b=$(this).html()});a.on("blur",function(){alert($(this).html()===b)})})(); но на таких размерах кода это немного нелепо. |
|||
11
Патчкорд
23.01.14
✎
09:14
|
(10) Действительно, размер кода нелепый.
Хочется обойтись одной простой командой. |
|||
12
sikuda
23.01.14
✎
13:09
|
||||
13
kokamoonga
23.01.14
✎
16:06
|
(11) Может вам стоит обойтись без javascript? Тогда не придется писать даже "одну простую команду".
Если бы вы потрудились хоть немного изучить вопрос, то поняли бы почему не работает пример из (0) и как заставить его работать http://jsfiddle.net/uebSB/9/ (12) Этот код делает ровно половину того, что делает код в (8) - вешает обработчик onBlur. И как он должен решить поставленную задачу? |
|||
14
sikuda
23.01.14
✎
18:48
|
Как то так http://jsfiddle.net/uebSB/10/
|
|||
15
sikuda
23.01.14
✎
18:51
|
Я думал с contenteditable не будет работать http://jsfiddle.net/uebSB/11/
|
|||
16
kokamoonga
23.01.14
✎
18:54
|
(15) Спасибо, кэп. Чем это отличается от (8)?
|
|||
17
Патчкорд
24.01.14
✎
08:24
|
(13) И как же заставить его работать??? Я знаю что никак, именно потому что изучал этот вопрос.
|
|||
18
sikuda
24.01.14
✎
09:46
|
(17) Хочется самому все переизобрести ;)))
Сейчас понял ответ (8) но ТС этого не понимает (17) |
|||
19
kokamoonga
24.01.14
✎
17:22
|
(17) а по ссылке сходить? http://jsfiddle.net/uebSB/9/
Этот пример, как и пример в (0), работает именно так как и должен работать. То есть ловит событие ввода в поле. (18) ТС непонятно чего хочет. Три примера, включая его собственный, все рабочие. Вероятно нужен код, который станет телепатировать его пожелания. |
|||
20
mrkorn
24.01.14
✎
21:29
|
(19) Вероятно, ТС хочет присобачить событие onChange произвольному тегу. Только не хочет понять, что браузеру надо объяснить, что делать.
кстати, еще один вариант повесить событие на conteneditable тег http://jsfiddle.net/MBags/ со stackoverflow.com правда, только для современных браузеров |
|||
21
kokamoonga
24.01.14
✎
21:46
|
(20) Вероятно да. Хотя я уже не уверен. Оказывается два обработчика событий это слишком много кода. ТС невдомек, что событие OnChange есть далеко не у каждого тега и что его нужно эмулировать в данном случае.
|
|||
22
Патчкорд
27.01.14
✎
10:01
|
Да... Не думал что вопрос такой сложный для понимания одинесников
|
|||
23
Котокот
27.01.14
✎
10:16
|
(22) Ага, здесь все тупые сидят. Кроме тебя, конечно.
|
|||
24
kokamoonga
27.01.14
✎
15:40
|
(22) дорогой господин д'Артаньян, вы агрессивны и неумны.
Вам 4 человека говорят разными словами примерно одно и то же. Что характерно, в профильном сообществе вам говорят то же самое http://javascript.ru/forum/events/44468-kak-otlovit-sobytie-v-contenteditable.html , правда там вы ведете себя поскромнее. P.S.: Я не одинесник. Если уж гребете всех под одну гребенку, то и меня не забудьте - "...для понимания одинесников и гостей нашего форума",- как-то так, а то я чувствую себя незаслуженно обойденным. |
|||
25
Патчкорд
28.01.14
✎
07:21
|
Еще и хамят. Не форум одинесников, а форум хамов, так надо было назвать сайт.
|
|||
26
sikuda
28.01.14
✎
10:06
|
Да ладно. Немного покритиковали... Мне Волшебник на то что ему не нравить вообще пишет.
http://infostart.ru/profile/user/41398/photo/photo/10980/253755/ И поразмыслив я с ним соглашаюсь. |
|||
27
Патчкорд
28.01.14
✎
11:00
|
(26) Да он вообще беспредельщик. Напридумывал зачем-то правила, которые ни сам, ни модеры не соблюдают. Значит их никто не обязан соблюдать.
|
|||
28
kokamoonga
28.01.14
✎
11:36
|
(25) толсто.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |