2013-04-17 3 views
1

В моем приложении много элементов DOM с использованием jquery-ujs. Это нормально по большей части.Повторное использование фокуса для замещенного элемента DOM

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

Я попытался следующие, но проблема в том, что JQuery, как представляется, рассматривать новый узел, как именно это, а не точную копию узла он заменяет:

$(document).on('ajax:beforeSend',function(){ 
    window.focussed = $("*:focus"); 
}); 
$(document).on('ajax:complete',function(){ 
    window.focussed.focus(); 
}); 

В идеале, я бы смог для этого, не добавляя к разметке.

+1

Не знаю, что такое ваш HTML, поэтому вы не можете предложить полное решение, но удаляемый элемент имеет имя или другой атрибут, который вы можете использовать для его выбора. ? Вы можете сохранить _selector_ и использовать его для повторного поиска элемента с помощью '$ (селектор) .focus()'. Или, наоборот, используйте индекс заменяемого элемента, чтобы повторно найти его, используя ['.eq()'] (http://api.jquery.com/eq/) – andyb

+0

Как уже упоминалось, я хотел бы отделить эту функциональность от разметка, если я смогу –

+0

Не будет больше связывания с разметкой, чем то, что уже существует. Я просто спрашивал, есть ли альтернативный способ хранения ссылки на сфокусированный элемент, либо через путь DOM, либо другой атрибут. Если вы добавите HTML к вопросу, я могу предложить что-то более конкретное. – andyb

ответ

0

Если элемент заменен новым узлом, то фокусировка на элементе, сохраненном в окне.focussed, ничего не сделает. Если у них одинаковый идентификатор, вы можете сделать это:

$(document).on('ajax:beforeSend',function(){ 
    window.focusedId = $("*:focus").prop("id"); 
}); 
$(document).on('ajax:complete',function(){ 
    $(window.focusedId).focus(); 
}); 
+0

. Интересно, есть ли другой способ вывести соответствие из информации, хранящейся в '$ (" *: focus ")', не требуя определенного атрибута , –

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