当用户开始在DRMCompanyName
输入文本框中输入内容时,会触发自动完成功能,同时显示公司名称和公司 ID。当用户单击选择时,公司名称和 ID 将被放置在DRMCompanyName
文本框中,而 id 将被放置在DRMCompanyId
正下方的文本框中。
当json
从控制器返回结果时,自动完成 ajax 函数中的代码通过将 设置为等于(公司名称)加上要返回的(公司 ID)来success
填充下拉列表。同样,设置为(公司 ID)。label
value
key
value
key
当用户选择特定项目时,label
应该进入DRMCompanyName
文本框,value
而DRMCompanyId
. 然而,最终发生的事情是value
两者都被放置。
我一遍又一遍地搜索我的代码,却找不到为什么label
没有放在DRMCompanyName
现场。
jQuery
$(function () {
$('#DRMCompanyName').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("compSearchByName", "AgentTransmission")',
type: 'GET',
dataType: 'json',
data: request,
success: function (data) {
response($.map(data, function (value, key) {
return {
label: value + " " + key,
value: key
};
}));
},
});
},
minLength: 2,
select: function (event, ui) {
console.log(ui);
$('#DRMCompanyName').val(ui.item.label);
$('#DRMCompanyName').text(ui.item.label);
if ($('#DRMCompanyId').text() == '') {
$('#DRMCompanyId').val(ui.item.value);
$('#DRMCompanyId').text(ui.item.value);
}
}
});
});
ui
这是上述函数中项目的示例屏幕截图select
(公司名称为隐私被涂黑)。当我在自动完成下拉菜单中单击此特定项目时,200014
会同时放置在DRMCompanyName
和DRMCompanyId
字段中。
剃刀标记
<div class="M-editor-field">
@Html.TextBoxFor(model => model.DRMCompanyName)
@Html.ValidationMessageFor(model => model.DRMCompanyName)
</div>
<div class="M-editor-label">
@Html.LabelFor(model => model.DRMCompanyId)
</div>
<div class="M-editor-field">
@Html.TextBoxFor(model => model.DRMCompanyId, new { maxlength = 10, title = "Start typing company name to activate DRM Company Name lookup. When DRM Company is found, select to fill in DRM Company ID and DRM Company Name fields." })
@Html.ValidationMessageFor(model => model.DRMCompanyId)
</div>
编辑
在遵循以下答案中的建议后,我修改了select
函数,如下所示:
select: function (event, ui) {
console.log(tempResults[ui.item.value]);
$('#DRMCompanyName').val(tempResults[ui.item.value]);
$('#DRMCompanyName').text(tempResults[ui.item.value]);
if ($('#DRMCompanyId').text() == '') {
$('#DRMCompanyId').val(ui.item.value);
$('#DRMCompanyId').text(ui.item.value);
}
}
根据console.log
读数,当用户单击自动完成项时,它会访问正确的值。但是,它仍然将值放在两个文本框中。当我选择 时,我无法理解Inspect Element
的是,正确的值DRMCompanyName
实际上是放在 HTML 中,但是它没有出现在屏幕上,只有id
or value
(与 相对label
)。