【发布时间】:2012-03-22 14:42:49
【问题描述】:
@charlietfl 对不起,我从 Asp.Mvc 视图返回 SelectListItem 的 json 集合 前面的数据样本是map操作的结果,ajax返回是:
[
Object { Selected=false, Text="Guarujá", Value="9182"},
Object { Selected=false, Text="Jaboticabal", Value="9265"},
Object { Selected=false, Text="Jacareí", Value="9267"},
Object { Selected=false, Text="Jandira", Value="9277"},
Object { Selected=false, Text="Jaú", Value="9285"},
Object { Selected=false, Text="Jundiaí", Value="9295"}
]
我想自动完成接收一个数组:{ label: "textToShow", value: "valueToBeKey" }
我的返回源事件的每一行中的“对象”都在破坏它?
我现在睡得很好,但欢迎所有帮助。
非常感谢
@charlietfl map 操作后有一个数据样本返回到源事件:
[
Object { label="Guarujá", value="9182"},
Object { label="Jaboticabal", value="9265"},
Object { label="Jacareí", value="9267"},
Object { label="Jandira", value="9277"},
Object { label="Jaú", value="9285"},
Object { label="Jundiaí", value="9295"},
Object { label="São João da Boa Vista", value="9647"},
Object { label="São José do Rio Preto", value="9659"},
Object { label="São José dos Campos", value="9660"}
]
遇到与this 问题相同的问题,但该解决方案对我不起作用。
有人可以帮助我吗?
在我选择项目 jquery 后的键/值场景中,将文本框设置为值而不是标签。
我找到了 jquery 用值设置我的文本框的点:
.menu({
focus: function( event, ui ) {
var item = ui.item.data( "item.autocomplete" );
if ( false !== self._trigger( "focus", event, { item: item } ) ) {
// use value to match what will end up in the input, if it was a key event
if ( /^key/.test(event.originalEvent.type) ) {
self.element.val( item.value ); <<<====== SETTING HERE
}
}
},
这是我的代码:
//-------------------------------------------------
function resetElmntKey(elm) {
var nmItK = $(elm).attr('data-fielditemid');
var sltK = $("input[name='" + nmItK + "'][type='hidden']");
$(sltK).val(0);
}
//-------------------------------------------------
function setupSelection(elm, selIt) {
if (selIt != undefined) {
var nmItK = $(elm).attr('data-fielditemid');
var sltK = $("input[name='" + nmItK + "'][type='hidden']");
var id = $(elm).attr('id');
var sltV = "#" + id;
$(sltK).val(selIt.value);
$(sltV).val(selIt.label);
}
}
//-------------------------------------------------
var context = new Array();
function setupView() {
var elm = $("div[class='editor-field'] :text");
$.each(elm, function () {
//-------
elemento = $(this);
//-------
/*
elemento.keypress(function (event) {
if (event.keyCode == 13) {
event.preventDefault();
}
});
*/
//-------
elemento.autocomplete({
source: function (request, response) {
var elId = $(this.element).attr('id');
context[elId] = new Array();
context[elId].elUr = this.element.attr('data-urlactionfind');
context[elId].elFt = this.element.attr('data-fieldfilterid');
context[elId].vlFt = $("#" + context[elId].elFt).val();
context[elId].elVl = this.element.val();
context[elId].result = null;
$.ajax
(
{
url: context[elId].elUr,
dataType: "json",
data: { filtro: context[elId].vlFt, fragmento: context[elId].elVl },
success: function (data) {
context[elId].result = $.map(data, function (item) {
return { label: item.Text, value: item.Value }
});
response(context[elId].result);
}
}
)
},
select: function (event, ui) {
resetElmntKey(this);
var elId = $(this).attr('id');
setupSelection(this, ui.item);
},
focus: function (event, ui) {
event.preventDefault();
resetElmntKey(this);
var elId = $(this).attr('id');
setupSelection(this, ui.item);
}
}).blur(function (event) {
event.preventDefault();
resetElmntKey(this);
var elId = $(this).attr('id');
if (context[elId].result != undefined) {
var usrVal = this.value;
var res = $.grep(context[elId].result, function (selIt, idx) {
return $.trim(selIt.label) == $.trim(usrVal);
});
if (res != undefined) {
setupSelection(this, res[0]);
}
}
});
//-------
});
/*
elm.keyup(function () {
var url_busca = $(this).attr('data-urlactionfind');
alert('[id:' + $(this).attr('id') + ']' +
'[val:' + $(this).val() + ']' +
'[urlact:' + $(this).attr('data-urlactionfind') + ']' +
'[fldFlt:' + $(this).attr('data-fieldfilterid') + ']');
});
*/
}
function onloadpartial() {
setupView();
}
//-------------------------------------------------
【问题讨论】:
-
取决于数据是什么样的......不需要显示你展示的 90% 的代码,而且你没有数据样本
-
@charlietfl 现在问题有数据样本,谢谢。
标签: jquery jquery-ui autocomplete