我希望用户能够键入自动填充的文本框,但如果找不到它,我希望它提交已写入的文本而不是值(在本例中为projectId)。
我目前的想法是捕获更改事件(查看注释掉的代码),然后更新隐藏字段,该字段将通过模型绑定传递给ASP.NET MVC控制器。
我的javascript看起来像这样:
$(function () {
$('*[data-autocomplete-url]')
.each(function () {
$(this).autocomplete({
source: $(this).data("autocomplete-url"),
minLength: 2,
select: function (event, ui) {
$(this).next('input:hidden').val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
focus: function (event, ui) {
$(this).next('input:hidden').val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
change: function (event, ui) {
alert(ui.item.value);
//if (ui.item.value == null) {
// $(this).next('input:hidden').val(ui.item.label);
//}
}
});
});
});
我的HTML看起来像这样:
<label for="ProjectID">Project</label>
<input type='text' data-autocomplete-url='/Projects/GetProjectsByUser' />\
<input id="ProjectID" name="ProjectID" type="hidden" value="" />
更改事件不触发 - 任何想法为什么?
答案 0 :(得分:0)
我认为这有几个问题。
这是我稍微修改过的代码:
<label for="ProjectID">Project</label>
<input class.='ac' type='text' data-autocomplete-url='/Projects/GetProjectsByUser' />
<input id="ProjectID" name="ProjectID" type="hidden" value="" />
$(function () {
$('.ac').each(function () {
$(this).autocomplete({
source: $(this).data("autocomplete-url"),
minLength: 2,
select: function (event, ui) {
alert('se');
$(this).next('input:hidden').val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
focus: function (event, ui) {
alert('f');
$(this).next('input:hidden').val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
change: function (event, ui) {
alert($(this).val());
}
});
});
});