change() イベントで ajax アクションを引き起こす 1 ~ 5 個の入力ボックスを備えた検索 UI があります。
クリックすると入力ボックスをクリアする「基準をクリア」ボタンもあります。これは適切に機能しますが、1 つ取り除きたい副作用があります。
ユーザーが検索入力にデータを入力したが、まだフィールドを離れていない (つまり、change() が実行されていない) 場合に、「条件のクリア」をクリックすると、変更が実行され、ajax アクションが発生します。入力ボックスがクリアされます。
ユーザーが「クリア」ボタンをクリックした場合に change() が発生しないようにしたいと思います。
関数の作成を開始しましたが、入力ボックスがボタンserachChangeHandler
へのフォーカスを失っているかどうかを識別する方法がわかりません。.ui-clear
私の質問は次のとおりです。 変更ハンドラーで、フォーカスがどこに向かっているのか、または別の方向から問題にアプローチする必要があるのか を伝えることができますか?
関連する JavaScript は次のようになります。
function displayResults(data) {
$('.searchResults').html(data);
}
function searchChangeHandler(e) {
ajaxSearch();
}
function ajaxSearch() {
$('#selectedRecord').empty();
if (isSearchable()) {
var myForm = $('#searchForm');
$.post(myForm.URL, myForm.serialize(), displayResults);
} else {
$('.searchResults').empty();
}
}
function displayRecord(data) {
$('#selectedRecord').html(data);
}
function searchResultClick(e) {
$('.searchResult').removeClass('selected');
$(this).addClass('selected');
$.ajax({
url: this.id,
success: displayRecord,
dataType: "html"
});
}
function clearSearchClick() {
$('.search input:text').val("");
toggleClearButton(false);
$('.searchResults').empty();
$('.first').focus();
}
function isSearchable() {
var allCrit = "";
$('.search input:text').each(function () {
allCrit += $(this).val();
});
return allCrit !== "";
}
function toggleClearButton(callback) {
$('.ui-clear').toggleClass("clear-enabled", callback);
}
$(function () {
toggleClearButton(isSearchable());
$('.ui-clear').click(clearSearchClick);
$('.search input:text').focusout(searchChangeHandler);
$('.search input:text').keyup(function () { toggleClearButton(isSearchable()); });
$(document).keypress(function (event) {
if (event.which === 13) {
event.preventDefault();
ajaxSearch();
}
});
});