2010-12-18 44 views
2

嗨我有表格上的表格。当页面加载被激发时,我把焦点设置为第一个输入[type ='text']。我用ajax发布表单,如果一切顺利,我在表格顶部添加新行。现在我不能将焦点设置到新插入的row.here是我的javascript代码:jquery setfocus()新插入的元素

$(document).keypress(function (e) { 
      var key_code = e.which; 
      if (key_code == 13) { 
       $.ajax({ 
        type: "POST", 
        url: "AddNewPayPackage", 
        data: $("#AddPackPayment").serialize(), 
        dataType: "text/plain", 
        success: function (response) { 
         if (response == "Saved") { 
          $('#myTable tbody tr:first input:text').removeAttr("tabindex"); 

          $.get('AddNewPayPackage', function (data) { 
           $('#myTable tbody tr:first').before("<tr>" + data + "</tr>"); 
          }); 

          $('.input-validation-error').removeClass('input-validation-error'); 
          $("form :input[type='text']:first").focus(); 
         } 
         else { 
          $("#myTable tbody tr:first").html(response); 
         } 
        } 
       }); 
      } 
     });  
+0

这可能会帮助你http://stackoverflow.com/questions/1433742/jquery-set-focus-to-field-in-div – 2010-12-18 07:34:35

回答

6

的问题是,你的在$.get()回调中添加元素后面,当服务器响应回来时带内容...因此您需要重点关注这种情况发生......在回调,这样以后:

$.get('AddNewPayPackage', function (data) { 
    $('#myTable tbody tr:first').before("<tr>" + data + "</tr>"); 
    $("form :input[type='text']:first").focus(); //needs to run here 
}); 
$('.input-validation-error').removeClass('input-validation-error'); 
+0

你很棒。我不知道。 yes $ .get()回调稍后在服务器响应返回时添加。但是我在这个回调块之后设置了焦点。为什么这样工作? – AEMLoviji 2010-12-18 13:04:01

+0

@AEMLoviji @AEMLoviji - 不知道如何解释它比......这是所有异步操作的工作方式,使用回调完成完成后需要完成的工作,“成功”或“完成”也一样'完整的'.ajax()'版本中的函数。 – 2010-12-18 13:05:25

+0

啊,很高兴知道! +1 – lnrbob 2010-12-18 13:28:45

1

看起来像一个错字:

$("form :input[type='text']:first").focus(); 

应该

$("form input[type='text']:first").focus(); 
+0

没有。它并没有帮助我 – AEMLoviji 2010-12-18 11:58:29

+0

其中任何一个都可以工作......但是因为我们正在处理一个''第二个*更有效率,并且我会跟着去做。 – 2010-12-18 12:58:37