1

我有一个表格,我在其中使用自动完成功能选择员工,并根据选择执行一些复杂的任务。因此,我在文本框的更改事件上发回表单。

这是我的开始表格

@using (Html.BeginForm("EmployeeEdit","Employee", FormMethod.Post, new { id = "EmployeeEditView" }))

这是我想在更改事件中回发表单的文本框。

@Html.TextBoxFor(m => Model.CurveToBeProxied, new { id = "txtSearchEmployee" })

这是更改事件的代码

$('#txtSearchEmployee').change(function () {
    alert("Hi");
    $('#EmployeeEditView').submit();
});

这是控制器动作。它适用于从 btnSelectEmployee 和 btnUnSelectEmployee 按钮单击回发,但不适用于文本框更改事件。我不知道如何识别更改事件。

public ActionResult EmployeeEdit(EmployeeEditViewModel model, string btnSelectEmployee, string btnUnSelectEmployee, string txtSearchEmployee)
{
    //if(! string.IsNullOrEmpty(btnSelectEmployee))
    //{
    //    SelectScenario(model);
    //}
    //else if (!string.IsNullOrEmpty(btnUnSelectEmployee))
    //{
    //    UnSelectScenario(model);
    //}
    return View(model);
}
4

1 回答 1

1

当输入框失去焦点时会触发 change 事件。尝试按 Tab。

或者...尝试使用keyup事件:

$('#txtSearchEmployee').keyup(function () { 
    var newValue = $('#txtSearchEmployee').val();       
    if(newValue === oldValue) // as RobertKoritnik suggested, check whether the value has changed in order to account for non-character keys such as arrow
       return false;

    oldValue = newValue;

    alert("Hi");
    $('#EmployeeEditView').submit();
});

更新:如何确定触发 HTTP 请求的 HTML 元素?

一种方法是添加一个隐藏字段,该字段将指定导致表单提交的元素。

例如,将其添加到您的模型中,然后创建如下字段:

@Html.HiddenFor(m => Model.ElementId, )

然后在提交表单之前设置它的值:

$('#txtSearchEmployee').change(function () {
    alert("Hi");
    $('#ElementId').val('txtSearchEmployee'); //set field that is causing the form submit
    $('#EmployeeEditView').submit();
});

您应该能够从控制器上的模型中检索此值。

于 2013-01-14T16:15:21.000 回答