我有一个带有 1-5 个输入框的搜索 UI,它们会在其 change() 事件上产生 ajax 操作。
我还有一个“清除标准”按钮,单击该按钮应清除输入框。这工作正常,但我有一个我想摆脱的副作用。
如果用户在搜索输入中输入了数据,但尚未离开该字段(即 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();
}
});
});