DBから値を選択するための汎用オートコンプリートを開発しています(製品名のリストからProductIDを選択すると考えてください)
一部のタイプでは、リストをフィルタリングして検証するために追加のパラメーターが必要なためdata-params
、フォームからデータをキャプチャする(または固定する)ためのフィールドが入力にあります
入力でこの構文を使用してajax呼び出しをフィードしようとしていますdata-params='{ProductType1: $("#ProductType1"), ProductType2: $("#ProductType2")}'
が、次のエラーが発生しました:Uncaught SyntaxError: Unexpected token :
1つのパラメータのみを使用すると正常に機能します。
data-params='{ProductType1: $("#ProductType1")}'
あなたが試すためのjsBin
http://jsbin.com/atamez/1/edit
これはhtmlです
<form>
<input type="text" id="ProductType1" name="ProductType1" value="123">
<input type="text" id="ProductType2" name="ProductType2" value="456">
<p>
<span class="superlist">
<input type="hidden" id="ProductID" name="ProductID" value="0">
<input type="text" id="Product" name="Product" value="" style="Width: 150px;"
class="superlistinput"
data-controller="Products"
data-params='{ProductType1: $("#ProductType1"), ProductType2: $("#ProductType2") }'>
</span>
</p>
</form>
Javascript
$(function () {
$('.superlistinput').each(function (i, el) {
dosuperlistinput(el);
});
});
function dosuperlistinput(el) {
el = $(el);
el.autocomplete({
minLength: 0,
source: function(request, response) {
$.ajax({
url: '/' + el.data("controller") + '/Lista/?term=' + request.term,
dataType: 'json',
data: eval(el.data("params")),
success: function(data) {
response(data);
}
});
},
select: function (event, ui) {
el.prev().val(ui.item.ID);
el.val(ui.item.Nombre);
return false;
},
change: function (event, ui) {
el.removeClass('superlistinvalid');
if (!ui.item) {
var valoractual = el.val();
$.getJSON('/' + el.data("controller") + '/ListaValidar/' + valoractual,
eval(el.data("params")),
function (json) {
var valid = false;
if (json.length > 0) {
el.prev().val(json[0].ID);
el.val(json[0].Nombre);
valid = true;
}
if (!valid) {
// it didn't match anything
el.addClass('superlistinvalid');
el.prev().val("0");
}
return false;
}
);
}
}
})
.data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append('<a>' + item.Nombre + (item.ExtraInfo === null ? '' : '<div><i>' + item.ExtraInfo + '</i></div>') + '</a>')
.appendTo(ul);
};
el.keyup(function (event) {
if (event.keyCode != '13' && event.keyCode != '9') {
el.prev().val(0).trigger('change');
}
});
addbuttonautocomplete(el);
}
function addbuttonautocomplete(el) {
el = $(el);
$('<button type="button"> </button>')
.attr('tabIndex', -1)
.attr('title', 'Mostrar todos los items')
.insertAfter(el)
.button({
icons: {
primary: 'ui-icon-triangle-1-s'
},
text: false
})
.removeClass('ui-corner-all')
.addClass('ui-corner-right ui-button-icon autocompletebutton')
.click(function (event) {
event.preventDefault();
// close if already visible
if (el.autocomplete('widget').is(':visible')) {
el.autocomplete('close');
return;
}
el.autocomplete('search', '');
el.focus();
});
}