jquery设置focus()新插入的元素

时间:2010-12-18 07:31:25

标签: javascript ajax jquery

嗨,我在表格上有表格。当页面加载被触发时,我将焦点设置为第一个输入[type ='text']。我用ajax发布表单,如果一切正常,我将新行添加到表的顶部。现在我无法将焦点设置为新插入的行。这是我的javascript代码:

  $(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);
                        }
                    }
                });
            }
        });    

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

看起来像是一个错字:

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

应该是

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