私の作成フォームには2つの入力フィールドがあります。 1つは隠され、もう1つはテキストフィールドです。バインドID Value to Hidden Input先読み経由の入力
@Html.HiddenFor(model => model.StateId)
<div class="form-group">
@Html.Label("State", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.Editor("StateName", new { htmlAttributes = new { @id="StateName", @class = "form-control" } })
@Html.ValidationMessageFor(model => model.StateId, "", new { @class = "text-danger" })
</div>
</div>
テキストフィールドには、先読みを使用して、ユーザーがテキストボックスに入力しているものに一致するオプションを選択できるようにしています。私のスクリプトは、ユーザーが実際にオプションを選択したときに機能しますが、ユーザーが単語全体を入力するだけでは機能しません。テキストフィールドは米国内の州のためのフィールドです。したがって、ユーザーがt
を入力すると、その文字を含む状態がユーザーが選択できるように表示され、ユーザーが希望の状態を選択すると、その状態のid
が非表示の入力フィールドにバインドされます。
でも、もし私がTexas
を入力したら、キーボードから手を離してオプションを選択するのではなく、ただ単語を入力するだけですみます。しかし、私はそれを行う場合..オプションを選択しないでください.. id
値は隠された入力フィールドにバインドされていません。
自動完了から選択しないと、ユーザーが望む状態のid
をどうやってバインドするのですか。ここで
は私のスクリプトです:
<script>
$(document).ready(function() {
/* For Auto Complete */
var states = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('state'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/api/statesapi?query=%QUERY',
wildcard: '%QUERY'
}
});
$('#StateName').typeahead({
highlight: true
},
{
name: 'states',
display: 'state',
source: states,
limit: 10
}).bind('typeahead:select',
function(ev, suggestion) {
$("#StateId").val(suggestion.id);
});
/* ************************** */
});
</script>
私は単語全体を入力すると...あなたが入力をリセットしたり、警告を表示することができるように、入力用のIDを取得する手立てもありません、示さ一切の提案はありません対応するオプションを選択することなく、動作しません。 –
'states.index.datums.length'が定義されていません –
@T_Roy更新しました。それがうまくいくか試してみてください。 –