【发布时间】:2020-03-27 10:00:05
【问题描述】:
在下面的示例中,我创建了一个 typeahead 类的实例
var ta = $.typeahead({
input: '.super',
minLength: 0,
maxItem: 15,
order: "asc",
hint: true,
href: "",
searchOnFocus: true,
display: ["name"],
template: "{{name}}",
source: {
"SearchResults": {
//ajax: {
// url: "/search/" + id,
// path: ""
//}
}
},
callback: {
onClickAfter: function (node, a, item, event) {
event.preventDefault;
debugger;
}
},
debug: true
});
稍后,通过使用通过以下方法获得的id变量
$("input").focus(function () {
id = $(this).attr("id");
ta.source.ajax.url = "/search/" + id;
});
我得到了Cannot set property 'url' of undefined,因为ta.source.ajax 实际上是空的。
我该如何解决?
简单地说,我不想为表单的每个输入创建重复的代码
【问题讨论】:
-
ta.source的是属性是什么?看起来应该是ta.source.SearchResults.ajax.url -
ta.source.ajax 实际上是 null - 如果它是 null,你会得到
Cannot read property 'url' of null- 它不是 null,它是错误的属性名称(因此未定义)跨度> -
实际上,如果我使用上面的注释代码并设置 id 效果很好。通过建议的解决方案,我得到无法读取未定义的属性“ajax”
-
你试过
ta.source["SearchResults"].ajax.url吗? -
@freedomn-m 当你为未定义的属性赋值时,它会抛出
TypeError: Cannot set property 'url' of undefined,当你访问它时会抛出TypeError: Cannot read property 'url' of undefined。 @OrElse 在分配或访问它之前验证对象属性。if (ta.source.ajax instanceof Object) { if (ta.source.ajax.url) { ta.source.ajax.url = "/search/" + id; } else { ta.source.ajax = { url: "/search/" + id } }} else { ta.source = { ajax: { url: "/search/" + id } } }
标签: jquery typeahead.js