将焦点设置为dynamic加载的DIV中的字段

什么是适当的方法来设置焦点到一个dynamic加载的DIV内的特定领域?

$("#display").load("?control=msgs"); // loads the HTML into the DIV $('#display').fadeIn("fast"); // display it $("tex#header").focus(); // ?? neither that $("input#header").focus(); // ?? nor that $('#display', '#header').focus() // ?? nor that $("#header").focus(); // ?? nor that works 

以下HTML被提取到display DIV中:

 <div id="display"> <form id="newHeaderForm" class="dataform" action="/" method="post"> <input id="to" type="hidden" value="22" name="to"/> <dl> <dt>Header</dt> <dd> <input id="header" class="large" type="text" name="header" value="" maxlength="128"/> </dd> </form> </div> 

非常感谢!

load()函数是一个asynchronous函数。 您应该在load()调用完成后设置焦点,即在load()的callback函数中,否则由#header引用的元素不存在。 例如:

 $("#display").load("?control=msgs", {}, function() { $('#header').focus(); }); 

即使使用这个解决scheme,我也遇到了问题,所以我在callback函数中设置了setTimeout,并在超时时设置焦点,以确保元素的存在。

你有没有尝试简单的selectID?

 $("#header").focus(); 

由于Ids应该是唯一的,所以不需要更具体的select器。

是的,在操作一个还不存在的元素的时候会发生这种情况(这里的一些贡献者也提供了唯一的ID)。 我遇到了类似的问题。 我还需要传递一个参数来处理即将渲染的元素。

在这里检查的解决scheme并没有帮助我。 最后,我发现一个开箱即用的工具。 它也非常漂亮 – closures。

代替:

 $( '#header' ).focus(); or the tempting: setTimeout( $( '#header' ).focus(), 500 ); 

尝试这个:

 setTimeout( function() { $( '#header' ).focus() }, 500 ); 

在我的代码中,testing传递参数,这不起作用,超时被忽略:

 setTimeout( alert( 'Hello, '+name ), 1000 ); 

这工作,超时滴答声:

 setTimeout( function() { alert( 'Hello, '+name ) }, 1000 ); 

这很糟糕,w3schools没有提到它。

积分转到: makemineatriple.com 。

希望这有助于来到这里的人。

Martas

 $("#display").load("?control=msgs", {}, function() { $('#header').focus(); }); 

我尝试过,但它不起作用,请给我更多的build议来解决这个问题。 谢谢你的帮助

如果

 $("#header").focus(); 

不工作,那么你的页面上的另一个元素的标题的ID?

使用萤火虫运行$("#header") ,看看它返回。

正如Omu所指出的那样,您必须在文档就绪function中设置焦点。 jQuery为您提供。 并select一个ID。 例如,如果您有login页面:

 $(function() { $("#login-user-name").focus(); }); // jQuery rocks! 

这在页面加载运行。

 <script type="text/javascript"> $(function () { $("#header").focus(); }); </script> 

dynamic添加的项目必须添加到DOM … clone().append()将其添加到DOM …它允许通过jqueryselect它。

 $("#header").attr('tabindex', -1).focus(); 
 $(function (){ $('body').on('keypress','.sobitie_snses input',function(e){ if(e.keyCode==13){ $(this).blur(); var new_fild = $(this).clone().val(''); $(this).parent().append(new_fild); $(new_fild).focus(); } }); }); 

大部分错误是因为使用错误的对象来设置prorepty或函数。 使用console.log(new_fild); 看哪个对象试图设置prorepty或函数。

如果你正在加载另一个页面/视图到你刚刚添加的div

$(document).ready(function(){ $("#header").focus(); });

您需要加载的页面 所以,当该页面加载时,它会自动设置该div的焦点。