将焦点重新应用于替换的DOM元素

时间:2013-04-17 16:16:45

标签: jquery ruby-on-rails ajax ruby-on-rails-3 ujs

在我的应用中,使用jquery-ujs的许多DOM元素。这在大多数情况下都很好。

偶尔,我有一个表单元素,在有焦点的同时被替换。我希望能够继续关注用户。

我已经尝试了以下方法,但问题是jquery似乎将新节点视为完全相同而不是它正在替换的节点的精确副本:

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

理想情况下,我可以在不添加标记的情况下实现此目的。

1 个答案:

答案 0 :(得分:0)

如果元素被新节点替换,那么关注window.focussed中保存的元素将不起作用。如果他们有相同的ID,你可以这样做:

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