私は以下のようなデータリストを持っています-
<input id="name" list="allNames" />
<datalist id="allNames">
<option value="Adnan1"/>
<option value="Faizan2"/>
</datalist>
私が欲しいのは、アイテムが完全に入力されたとき(たとえば、ユーザーが「Adnan1」を完全に入力したときに入力ボックスに入力したとき)、またはリストから選択されたとき、イベントが必要です。いくつかのアプローチを試しましたが、両方とも今のところ役に立ちません。アプローチは-
$("#name").change(function(){
console.log("change");
}
これに関する問題は、入力がフォーカスを外したときにのみイベントがトリガーされることです。画面のどこかをクリックすると。
私も試しました
$("#name").bind('change', function () {
console.log('changed');
});
入力するたびにコールバックがトリガーされます。実際に、アイテムが完全に選択されたときにAJAXを呼び出す必要があります。入力またはドロップダウンから選択してください。
最初のアプローチは、ユーザーの観点から見ると、余分なクリックを行う必要があるため、ユーザーの観点からは良くありません。
私が欲しいのは、ユーザーが選択したか、完全な文を入力したときのイベントだけです。これを達成する方法はありますか?私が行方不明であり、それが私の問題を解決することができるイベント。
最新のブラウザ では、input
イベントを使用できます。例:
$("#name").on('input', function () {
var val = this.value;
if($('#allNames option').filter(function(){
return this.value.toUpperCase() === val.toUpperCase();
}).length) {
//send ajax request
alert(this.value);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="name" list="allNames" />
<datalist id="allNames">
<option value="Adnan1" />
<option value="Faizan2" />
</datalist>
PS:input
イベントのサポートは datalist 要素よりも優れているため、既にdatalist
要素を使用している場合は使用しない理由はありません。
以下のように、input
イベントを使用してこのような機能を実現できます。
$(document).ready(function() {
$('#name').on('input', function() {
var userText = $(this).val();
$("#allNames").find("option").each(function() {
if ($(this).val() == userText) {
alert("Make Ajax call here.");
}
})
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="name" list="allNames" />
<datalist id="allNames">
<option value="Adnan1" />
<option value="Faizan2" />
</datalist>
シンプルなソリューション
document.getElementById('name').addEventListener('input', function () {
console.log('changed');
});
thisが機能するかどうかを確認します:
var dataList=[];
$("#allNames").find("option").each(function(){dataList.Push($(this).val())})
console.log(dataList);
$("#name").on("keyup focus blur change",function(){
if(dataList.indexOf($(this).val())!=-1)
console.log("change");
})
Datalistオプションをarrayにプッシュし、イベントkeyup、blur、またはfocusを変更すると、入力値がdatalist配列に存在するかどうかを確認します。