在 AJAX _partial刷新失败后设置元素焦点

setting element focus after ajax _partial refresh fails

提问人:DazzaJ 提问时间:11/14/2023 更新时间:11/14/2023 访问量:23

问:

我有一个包含输入的部分元素。我将当前聚焦的元素 ID 存储在父表单上的隐藏输入中。 使用 ajax 调用刷新部分元素后,我想将焦点重置回先前选择的元素。 存储和检索元素 ID 的所有功能都有效,部分刷新和其中调用的数据更新也是如此,但是当我最后设置焦点时,似乎什么也没发生。 请有人告诉我我哪里出了问题。

我正在使用 chrome 进行测试,该应用程序是使用 VS2022 和 ASP.net Core 6 编写的

下面是调用的 onChange 代码,用于刷新部分元素和任何日志记录

$(document).on('change', ".updateable", function (event) {
    //if (event.type === 'change') {
    //$(".updateable").change(function() {
    console.log("focusHolder.val - pre refresh " + $('#focusHolder').val());
    var subAgent = $('#subagentId').attr('value');
    var rowId = $(this).attr('rowID');

    var updatedField = $(this).attr("id").substring(0, $(this).attr("id").length - (rowId.length + 1));
    var updatedValue = $(this).val(); 
    $.ajax({
        url: '/Rating/UpdateCurrentRates',
        type: 'POST',
        data: { subAgent_ID: subAgent, row_ID: rowId, fieldName: updatedField, newValue: updatedValue },
        success: function (result) {
            $("#newRates").html(result);
        },
        error: function (xhr, exception) {
            //alert;
            return false;
        }
    })
        //    .done(function () {

        //    console.log("focused - done " + focused);
        //    var focused = $('#focusHolder').val();
        //    $(focused).focus();

        //})
        .always(function () {

            var focused = $('#focusHolder').val();
            console.log("focused - always " + focused);
$(focused).focus();

        });
    console.log("ajax call finished");

});
jquery ajax asp.net-core

评论

0赞 pcalkins 11/15/2023
似乎你想要 var focused = $('#focusHolder') 删除 .val()
0赞 DazzaJ 11/15/2023
感谢您的回复。#focusHolder 只包含我想要设置焦点的元素的名称,所以我将该值传递到一个变量中,然后在我尝试设置焦点时将其转换为对象。我也尝试单独将对象转换为对象,但这似乎也不起作用: var focusedName = $('#focusHolder').val();$focused = $(focusedName);$focused.焦点();
0赞 DazzaJ 11/15/2023
@pcalkins - 你刚刚让我看到了这个问题。我知道这将是我缺少的简单东西,但在回复你之前看不到它。在将当前聚焦的元素名称写入 #focusHolder 隐藏字段时,它不包含“#”符号。因此,在强制转换时,它永远不会找到 id,因为它在 id 引用中缺少“#”。
0赞 pcalkins 11/16/2023
“#”应该是 jQuery 将 ID 属性指定为定位器的方式。id 应该只是“focusHolder”。(确保它是独一无二的......如果需要,您可以执行 $('#' + yourID)。

答: 暂无答案