2 열 자동 완성을 만들려고합니다. 이론이 코드는 정확해야하지만, 나는 Uncaught TypeError: object is not a function
오류를 계속 그리고 왜 모르겠어요.jQuery 위젯이 'object is a function'을 반환하는 이유는 무엇입니까?
누구나 왜이 오류가 발생하는지 알 수 있습니까? Here is my fiddle - 오류를 재현하려면 mo
으로 시작하는 텍스트 필드에 2 자 이상 입력하십시오.
PS. jsFiddle에 버그가 있습니다. 처음 저장 한 후 업데이트를 클릭하면 403이 금지됩니다. 바라건대 그들은이 문제를 가능한 빨리 해결할 것입니다.
UPDATE 그래서 좀 디버깅을 수행했습니다. jquery.min.js
에서 jquery.js
로 전환하면 jQuery를 실제로 each
에 실패 보여줍니다이 수행하여 그래서
TypeError: obj is undefined
length = obj.length,
:
:var stores = items.stores;
console.log(stores.toSource());
당신이 TypeError: stores is undefined
을 얻을하지만 것이다 당신은이 작업을 수행하는 경우
$.each(items, function(index, item) {
console.log(item.toSource());
});
it 출력
// Stores
({0:{id:"4058", name:"Moods"...}, 1:{id:"4059", name:"Moody"...}, label:(void 0), value:(void 0)})
// Brands
({0:{id:"4673", name:"Moods"...}, 1:{id:"4674", name:"MOOKS"...}, label:(void 0), value:(void 0)})
업데이트 2
것이다 response(data);
는 JSON 객체의 매개 변수를 이름을 제거합니다 것으로 보인다.
이 할 경우
success: function (data) {
console.log(data.stores.toSource()); // <-- This works
response(data); // But after this, it no longer works
}
지금 당신은 도트 수있는 그의 :
console.log(data[0].toSource());
코드 :
"소스"매개 변수는 입력의 3 개 종류를 받아var data =
{"stores":[
{"id":"4058","name":"Mo-shu","city":"Oslo","fk_countryID":"NO"},
{"id":"4059","name":"Mood","city":"Oslo","fk_countryID":"NO"}
],
"brands":[
{"id":"4673","name":"Moods"},
{"id":"4674","name":"MOOKS"}
]
}
$.widget("custom.searchAutocomplete", $.ui.autocomplete, {
_renderMenu: function(ul, items) {
var self = this;
ul.addClass('searchAutocomplete');
ul.append('<li class="stores left"></li>');
ul.append('<li class="brands left"><li>');
$.each(items.stores, function(index, item) {
self._renderItem(ul.find('.stores'), item, 'store');
});
$.each(items.brands, function(index, item) {
self._renderItem(ul.find('.brands'), item,'brand');
});
},
_renderItem: function(li, item, type) {
var listItem = $('<div />');
listItem.data('ui-autocomplete-item', item);
if(type == 'store') {
listItem.append("<a>"+ item.name + "<br /><span class='address'>Street name here</span></a>");
} else {
listItem.append('<a>' + item.name + '</a>');
}
listItem.appendTo(li);
return listItem;
}
});
$('#search-box').searchAutocomplete({
minLength: 2,
source: data,
select: function(e, ui){
$(this).val(ui.item.name);
return false;
}
});
을, 나는 거기에이 코드에 문제가 있지만, 생각하지 않는 사용자 정의 개체 유형을 갖는 ... 사용자 정의 위젯을 만들 수 있도록 몇 가지 기능을 시도하고 있기 때문에 이 타입의 객체를 취하지 않는 자동 완성 ('label'과'value'를 갖는 포맷의 기본 객체를 취함)은 문제를 일으 킵니다 ...'select'와 같은 나머지 자동 완성 옵션도 정의하십시오 ... – j809