当前位置: 首页 > 知识库问答 >
问题:

剑道UI输入焦点-选择和Ajax调用后,DropdownList保留焦点

聂翼
2023-03-14

我们有一个带有下拉列表和Telerik Kendo UI控件的表单(以及Telerik网格)。

当用户从下拉列表中进行选择时,将向MVC控制器动作发出一个ajax调用,该动作将发回更多数据,这些数据将部分填写表单。其中一个字段用Kendo UI NumericTextBox表示。

要求是在数据返回时在此NumericTextbox上设置输入焦点。

然而,这似乎在我尝试的任何场景中都不起作用。

下面是如何在页面上定义数字文本框:

@Html.Kendo().NumericTextBoxFor(model => model.ApplyFromPOA).Name("ApplyFromPOA").Step(0.01m).Min(0.00m).HtmlAttributes(new { @style = "width: 100%", @id = "ApplyFromPOA", @class = "defaultfocus" })

以下是dropdownlist的定义:

@Html.Kendo().DropDownList().Name("AddPaymentCustomer").BindTo(@Model.CustomerList).DataTextField("Name").DataValueField("ID").HtmlAttributes(new { style = "width: 100%; max-width: 300px;" }).Events(e => { e.Change("changeCustomerInAddPaymentWindow"); })

函数的变化如下:

 function changeCustomerInAddPaymentWindow (e) {

    var dataItem = getSelectedDataItemFromDropdown(e);
    var datagrid = $('#MyCustomerInvoiceResults').data('kendoGrid');
    var dataSource = datagrid.dataSource;


    if (null != dataItem) {
        if (dataItem.ID == 0) {

            // Clear out the form

            clearOutForm();
        }
        else {

            $.ajax({
                url: "/Home/GetCustomerAndInvoices",
                type: 'POST',
                data: {
                    customerId: dataItem.ID
                },
                success: function (updatedModel) {


                    $("#ApplyFromPOA").val(updatedModel.ApplyFromPOA);
                    $("#poaAvailable").val(updatedModel.POAStringNoCommas);
                    $("#POAString").html(updatedModel.POAString);
                    $("#amount-left").html(updatedModel.POAString);

                    $.each(updatedModel.Invoices, function (index, item) {
                        dataSource.add(item);
                    });

                    dataSource.sync();

                    setTimeout(function () {
                        $("#ApplyFromPOA").select();
                        $("#ApplyFromPOA").focus();
                        $("#ApplyFromPOA").find("input").focus(0, function () { });
                    }, 200);

                },
                error: function () {

                }
            });            
        }
    }
}

相关部分是在ajax调用返回后尝试将焦点设置在“ApplyFromPOA”控件上。这不工作。下拉列表保留焦点。

我还尝试使用网格的“sync”事件调用一个特殊函数,该函数将在“ApplyFromPOA”NumericTextBox上设置输入焦点。那里也没有爱。

在任何情况下,DropdownList都会顽固地保留输入焦点。

问题是NumericTextbox不会将自身更新为Ajax调用后设置的值,直到有人实际单击该字段。当AJAX调用返回时,我们将执行以下操作:

$("#ApplyFromPOA").val(updatedModel.ApplyFromPOA);

理想情况下,我们无论如何都需要在数字文本框上输入光标。

谢谢你的帮助。

乍得雷曼

共有1个答案

容俊豪
2023-03-14

Kendo NumericTextBox实际上做了一件非常令人讨厌的事情,并将您现有的

您要做的是使用小部件实例而不是输入元素。

在您的成功回调中,不要使用jQuery函数,如. val(). point(),而是将其替换为:

success: function (updatedModel) {
    // get Kendo widget instance
    var applyFromPoaWidget = $("#ApplyFromPOA").data("kendoNumericTextBox");

    // set new value
    applyFromPoaWidget.value(updatedModel.ApplyFromPOA);

    // set focus
    applyFromPoaWidget.focus();
}

 类似资料:
  • 问题内容: 我有文字输入。当输入获得焦点时,我想选择输入内的文本。 使用jQuery,我可以这样: 我四处搜寻以尝试找到Angular方式,但是我发现的大多数示例都在处理一个指令,该指令正在监视模式属性的更改。我假设我需要一个指令来监视接收焦点的输入。我该怎么办? 问题答案: 在Angular中执行此操作的方法是创建一个自定义指令,该指令会为您自动选择。 应用如下指令: Update1 :删除了j

  • 我有剑道下拉列表,我想选择下拉列表的选择值。我得到了选定项目的文本,但不是应该是ID的值。 绑定数据与Dropdown列表剑道 使用剑道下拉列表绑定选择函数。

  • 问题内容: 呈现组件后,将焦点设置在特定文本字段上的反应方式是什么? 文档似乎建议使用引用,例如: 在渲染函数中的输入字段上进行设置,然后调用: 但是我应该在哪里称呼它呢?我已经尝试了几个地方,但无法正常工作。 问题答案: 您应该这样做,而不是。像这样

  • 我有一个可编辑的剑道网格,有一个字段是一个下拉列表。我有一个和字段需要在该列中使用。名称显然会显示,而ID应该是用于绑定的。我已经在下面的示例中删除了我的数据源URL,但是DropDownList数据显示良好,包含名称和ID值列表。 我已经看了一段时间了,所以我可能错过了一些明显的东西。我对这个问题有一个相同的问题(下拉列表不绑定到该行中显示的用户,直到我单击下拉列表来展开它),但是我认为我的模型

  • 在 Photoshop 中您可以轻松地选择位于焦点中的图像区域/像素。 执行以下操作: 在 Photoshop 中打开图像后,选取“选择”>“焦点区域”。在“焦点区域”对话框中,您可以更改默认选区。 调整“焦点对准范围”参数以扩大或缩小选区。如果将滑块移动到 0,则会选择整个图像。但是,如果将滑块移动到最右侧,则只选择图像中位于最清晰焦点内的部分。操作演示:使用默认选项选择焦点区域 使用画笔控制在

  • 当组件挂载时,我试图专注于输入。输入组件是一个样式化的组件,因此我使用innerRef来获取对元素的引用。然而,当组件挂载时,输入不会得到焦点。我已经检查了该节点是否实际获得了对DOM节点的引用。我找不到我的逻辑有任何问题。谢谢你的帮助。