我有一个表单,我从中选择员工使用自动填充功能,并根据选择执行一些复杂的任务。因此,我在文本框的更改事件上发回表单。
这是我的开始表格
@using (Html.BeginForm("EmployeeEdit","Employee", FormMethod.Post, new { id = "EmployeeEditView" }))
这是我想在更改事件上回发表单的文本框。
@Html.TextBoxFor(m => Model.CurveToBeProxied, new { id = "txtSearchEmployee" })
以下是Change事件的代码
$('#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);
}
答案 0 :(得分:2)
当输入框失去焦点时,将触发更改事件。尝试按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();
});
更新:如何确定哪个HTML元素触发了HTTP请求?
执行此操作的一种方法是添加一个隐藏字段,该字段将指定导致表单提交的元素。
例如,将其添加到模型中,然后创建如下字段:
@Html.HiddenFor(m => Model.ElementId, )
然后在提交表单之前设置其值:
$('#txtSearchEmployee').change(function () {
alert("Hi");
$('#ElementId').val('txtSearchEmployee'); //set field that is causing the form submit
$('#EmployeeEditView').submit();
});
您应该能够从控制器上的模型中检索此值。