ユーザーがDRMCompanyName
入力テキスト ボックスへの入力を開始すると、会社名と会社 ID の両方を表示するオートコンプリート機能が起動します。ユーザーが選択をクリックすると、会社名と ID がDRMCompanyName
テキスト ボックスに配置され、ID がDRMCompanyId
すぐ下のテキスト ボックスに配置されます。
コントローラーからjson
結果が返されると、オートコンプリート ajax 関数のコードは、返される(会社名) に(会社 ID) を加えた値に等しくなるようにsuccess
設定して、ドロップダウン リストに入力します。同様に、は(company id)のみに設定されます。label
value
key
value
key
ユーザーが特定の項目を選択すると、 がテキスト ボックスに、label
が に移動するはずです。ただし、結局、get が両方に配置されます。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
またはvalue
(ではなく) のみが表示されますlabel
。