LINUX.ORG.RU

[JS] Объект под фокусом

 


0

1

Задача: вставить текст под курсор в произвольную форму ввода (там, где курсор, т. е. в ту, что под фокусом).
Как получить объект под фокусом?

Пробую:

document.activeElement.value+="test"
Получаю фигню.

Собственно вот здесь вопрос, в остальном в задаче справлюсь.

document.activeElement — это IE'шная фича, в FF et al прямого аналога нет.

Можно попробовать что-то такое:

var focusedElement = null;

if (document.addEventListener) {
   document.addEventListener('focus', function(e) { focusedElement = e.target; }, true);
   document.addEventListener('blur', function(e) { focusedElement = null; }, true);
}
sjinks ★★★
()

можно всем input навесить событие например.

Megamozg
()
Ответ на: комментарий от sjinks

Это работает очень непредсказуемо. Чаще не работает.

А почему

$("textarea:focus").innerHTML+='test';
не работает? jQuery подключил.

Сабж локальный, мне это не для веб, а для себя надо. Т. е. у меня закладка на панели закладок, и в нее я пишу javascript: код.

moscwich
() автор топика
Ответ на: комментарий от moscwich

Вот как:

Uncaught exception: TypeError: Cannot convert 'focusedElement' to object
Incorrect value to a primitive operation
Это по поводу того, что ты попробовать предложил.

ЗЫ: У меня с JS очень плохо.

moscwich
() автор топика
Ответ на: комментарий от moscwich
<html>
<head>
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
<script type='text/javascript'>
  $(document).ready(function(){
    $('input').focus(function(){
      var text = $(this).val();
      $(this).val(text+'123');
    });		
  });
</script>
</head>
<body>
<input type='text' />
<br>
<input type='text' />
<br>
<input type='text' />
</body>
</html>
Megamozg
()
Ответ на: комментарий от Megamozg

Где-то в гугле я на это уже натыкался...
Ну не то это. Да и быдлокод это детектед, хоть я и JS не знаю почти.

moscwich
() автор топика
Ответ на: комментарий от moscwich
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
    var time = 1000
    var interval = 100
    setTimeout(function () {
        $("textarea:focus").val("TADA!!!111")
    }, time)
    var timer = setInterval(function () {
        time -= interval
        $("#timer").html(time)

        if (time < interval) {
            clearTimeout(timer)
        }
    }, interval)
})
</script>
</head>
<body>
<span id="timer"></span>
<textarea></textarea>
</body>

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Спасибо, не знал, что $(function () {...}) делать надо. Впервые с jQuery связался.
А фокус действительно теряется :(
Буду думать, можно и кое-как иначе подойти...

Всем спасибо.

moscwich
() автор топика
Ответ на: комментарий от sjinks

> document.activeElement — это IE'шная фича, в FF et al прямого аналога нет.

Он давно везде работает, в опере как обычно с глюками.

JustGuest
()

Если в произвольной форме ввода есть текст, то вопрос решается перебором и selectionStart/selectionEnd. Иначе юзерскрипт //или иешное document.selection.createRange если оно там ещё есть.

JustGuest
()
Ответ на: комментарий от JustGuest

> Он давно везде работает

Когда успел? В FF alert(typeof document.acriveElement); выдаёт undefined (вне зависимости от активного элемента).

sjinks ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.