2014-09-01 3 views
0

есть ли простой способ держать курсор в элементе ввода, когда я перемещаю элемент по DOM?Держите курсор в вводе html при перемещении ввода через DOM

Пример: http://jsfiddle.net/y1nu1q4f/1/

<form> 
    <input type='text' name='a' /> ho ho ho 
    <input type='text' name='b' /> merry christmas 
</form> 
<script> 
setTimeout(function(){ 
    $('input[name="a"]').appendTo($('form')); 
    $('input[name="b"]').appendTo($('form')); 
}, 3000); 
</script> 

Этот пример перемещает ввод текста через 3 секунды. Когда вход сфокусирован (курсор внутри), он теряет фокус при перемещении. Можно ли сохранить/вернуть курсор в исходное положение?

В моем приложении у меня есть много входов в форме, которая DOM реорганизуется именно так, поэтому мне нужно некоторое простое и гибкое решение, не добавляя кучу дополнительных атрибутов и кода для каждого ввода. Решение jQuery предпочтительнее чистого javascript.

Заранее благодарим за ответы.

+0

что-то вроде этого? http://jsfiddle.net/mq4grbmw/ –

+0

$ ('input'). focus() – Sami

+0

Извините, это не поможет, поскольку я прокомментировал ответ ниже. Я попытался обновить пример, чтобы быть более понятным - у меня больше входных данных, и мне нужно держать фокус в том, что было раньше, а не просто фокусировать один вход после перемещения. – amik

ответ

1

Что-то вроде этого следует сделать трюк.

setTimeout(function(){ 
    var focusedElement = jQuery(':focus'); // ideally specify tag, class or ID here before the ':focus' to avoid jQuery scanning all elements on the page. 

    $('input[name="a"]').appendTo($('form')); 
    $('input[name="b"]').appendTo($('form')); 

    if (focusedElement && focusedElement.length) { //fixed var name here 
     focusedElement.focus(); 
    } 
}, 3000); 
+0

Спасибо, это почти все. Тем не менее, MSIE (тестируется в 11) фокусирует элемент, однако не помещает в него курсор (и я могу только мечтать о том, чтобы поместить курсор в его исходное положение в IE), что делается в других браузерах автоматически даже до исходной позиции. Есть ли подходящее решение для MSIE не менее 9,10 и 11? – amik

+0

Я не уверен, но этот элемент SO может быть уместным: http://stackoverflow.com/questions/1326993/jquery-focus-sometimes-not-working-in-ie8 –

+0

спасибо, это помогло: setTimeout (function() {focusElement.focus();}, 10); – amik

0

Вы можете использовать focus(), чтобы сфокусироваться на элементе.

Если я возьму ваш пример jsfiddle, вы просто добавите $('input').focus(); в свою функцию после переключения. И тебе хорошо идти.

Итак:

setTimeout(function(){ 
    $('input').appendTo($('form')); 
    $('input').focus(); 
}, 3000}; 

DEMO

+0

Спасибо, но 1) Я не знаю, был ли вход сфокусирован перед движением - ваш скрипт будет фокусировать его всегда после перемещения DOM - это не предназначено, я хочу сосредоточиться там, где это было до реорганизации DOM. 2), как я уже сказал, у меня много материалов на моем веб-сайте, поэтому я должен определить, где основное внимание было перед ходом, а не просто фокусировать какой-либо конкретный вклад. Таким образом, это не поможет. – amik

+0

См. Мой ответ ниже: http://stackoverflow.com/a/25610631/289203 –

Смежные вопросы