「リモート」パスで変数を取得するために、何時間も試しました。変数は、別の入力に応じて変化します。コードは次のとおりです。
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に切り替えたところ、先行入力が非推奨になっていることに気付きました。上記のコードはBootstrap 2.3で機能しましたが、スクリプトが初期化されると、リモートパスはロックされます。
私は解決策を見つけました!コード:
$('#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
});
このスレッドの回答に基づく: Bootstrap 3 typeahead.js-リモートURL属性
typeahead.js docs の関数「replace」を参照してください。
受け入れられた答えは今では時代遅れだと思います。 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;
}
}
});
私が遭遇した問題の1つは、別のtypeahead
オブジェクトから値を取得することでした。 Typeaheadは基本的に、すべてのクラスを含む入力を複製するため、2つのほぼ同一のオブジェクトがあります。1つはtt-hint
クラスで、もう1つはtt-input
です。 tt-input
セレクターであることを指定する必要がありました。そうしないと、取得した値は空の文字列でした。
$('.field-make').val(); // was "" even though the field had a value
$('.field-make.tt-input').val(); // gave the correct value
実際には、新しい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
});
@Mattias、ヘッドアップと同じように、オプションのreplace
パラメータを指定することで、url
メソッドを少しクリーンアップできます。
$('#programme').typeahead({
remote: {
url: 'typeahead.php?programme&type=1&school_name=',
replace: function (url, query) {
// This 'if' statement is only necessary if there's a chance that the input might not exist.
if ($('#school').val()) {
url += encodeURIComponent(('#school').val());
}
return url;
}
},
cache: false,
limit: 10
});