我已经尝试了几个小时,在我的“远程”路径中获取变量。变量将根据另一个输入而改变。这是代码:
school_value = $('#school').val();
$('#school').change(function () {
school_value = $(this).val();
$('#programme').typeahead('destroy'); // I have also tried with destroy - but it doesnt work.
});
$('#programme').typeahead({
remote: 'typeahead.php?programme&type=1&school_name=' + school_value,
cache: false,
limit: 10
});
变量'school_type'未在远程地址中设置,因此未被调用。
你有什么线索如何让它运作?我刚从Bootstrap 2.3切换到3,然后注意到typeahead已被弃用。以上代码适用于Bootstrap 2.3,但似乎初始化脚本时,远程路径被锁定。
答案 0 :(得分:14)
我找到了解决方案!代码:
$('#programme').typeahead({
remote: {
url: 'typeahead.php?programme&type=1&school_name=',
replace: function () {
var q = 'typeahead.php?programme&type=1&school_name=';
if ($('#school').val()) {
q += encodeURIComponent($('#school').val());
}
return q;
}
},
cache: false,
limit: 10
});
中的“替换”功能
答案 1 :(得分:10)
我相信已接受的答案现已过时。 remote
选项不再具有replace
。相反,您应该使用prepare
:
$('#programme').typeahead({
remote: {
url: 'typeahead.php?programme&type=1&school_name=',
prepare: function (query, settings) {
settings.url += encodeURIComponent($('#school').val());
return settings;
}
}
});
我遇到的一个问题是从另一个typeahead
对象中提取值。 Typeahead基本上会复制您的输入,包括所有类,因此您有两个几乎相同的对象,一个具有tt-hint
类,另一个具有tt-input
。我必须指定它是tt-input
选择器,否则我得到的值是一个空字符串。
$('.field-make').val(); // was "" even though the field had a value
$('.field-make.tt-input').val(); // gave the correct value
答案 2 :(得分:3)
在新的Bloodhound js中,Mattias的答案实际上略有改进,这减少了重复和错误的机会:
$('#programme').typeahead({
remote: {
url: 'typeahead.php?programme&type=1&school_name=',
replace: function (url, query) {
if ($('#school').val()) {
url += encodeURIComponent($('#school').val());
}
return url;
}
},
cache: false,
limit: 10
});
答案 3 :(得分:0)
@Mattias,就像提前一样,您可以通过提供可选的(a2, b2, w)
参数来稍微清理replace
方法。
url
答案 4 :(得分:0)
我和你们所有人都在看相同的东西吗?
http://www.runningcoder.org/jquerytypeahead/
似乎再次改变了!如何做到这一点在文档中不是很明显,但是有示例代码。我直接从文档中的代码中提取了此信息。
文档中还有第二个示例,他们以另一种方式进行操作!我认为这是最简洁的方式。
// Set a function that return a request object to have "dynamic" conditions
dynamic: true,
source: {
tag: {
ajax: function (query) {
if (query === "hey") {
query = "hi"
}
return {
url: "http://www.gamer-hub.com/tag/list.json",
dataType: "jsonp",
path: data,
data: {
q: query
}
}
}
}
}
这是我的工作示例:
source: {
ajax: function() {
var filter = {
partnerId: @Model.PartnerId,
productTypeId: @Model.ProductTypeId,
unitType: $("[name=UnitType]").val(),
manufacturer: "",
columnName: "@nameof(SaleViewModel.Manufacturer)"
};
var queryString = $.param(filter);
return {
url: recentEntriesBaseUrl + "?" + queryString
}
}
},