我有一个带有5个文本输入框的表单的ASP.NET MVC 3项目,允许用户输入搜索条件。
目前,当用户从一个字段切换到下一个字段时,我有一个$('.watched').blur(ajaxSearch);
函数可以发出我的ajaxSearch
函数,这样就行了,排序......
我的问题是,每当我选中字段时,每次调用ajaxSearch,或者点击.searchResults
结果div中显示的其中一个值。
我在问题的最后部分放了我当前的搜索javascript。
我想将值存储在文本框中,然后在发出另一个ajax调用之前检查它们是否有更改。
Psuedocode想法
var oldvalues = {}
function saveCurrentValues() {
foreach( input box on the form ) {
save the currentvalue of the input box into oldvalues['inputboxid']
}
}
function isNewSearch() {
foreach( input box on the form ) {
if (oldvalues['inputbox.id'] !== input box value) {
return true;
}
}
return false;
}
我不确定如何实现foreach和oldvalues赋值。一些javascript专家可以指出我在这个实现的正确方向。 (我在下面的javascript中放了评论行,我认为这个实现应该去实际工作。)
的javascript
function displayResults(data) {
$('.searchResults').html(data);
}
function ajaxSearch() {
// if (isNewSearch() ) {
// saveCurrentValues();
$('#selectedRecord').empty();
var myForm = $('#searchForm');
$.post(myForm.URL, myForm.serialize(), displayResults);
//}
}
$(function () {
$('.watched').blur(ajaxSearch);
//saveCurrentValues();
});
答案 0 :(得分:7)
而不是制作自己的功能。您无法使用此change
事件代替blur
事件。
$('.watched').change(ajaxSearch);
更改事件仅在元素 (输入,文本区域) 的值更改然后模糊时发生。
更改事件在其值更改时发送到元素。此事件仅限于元素,框和元素。对于选择框,复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型 (输入,文本区域) , 事件被推迟,直到元素失去焦点。
答案 1 :(得分:3)
// Bind to the blur event (and change event)
// but only trigger it when a new value is present:
$('.watched').on('blur change',function(e){
var $this = $(this),
curValue = $this.val(),
lastval = $this.data('last');
// check if it's a new value
if (lastVal != curVal){
// store new value
$this.data('last',curVal);
// now call ajax
ajaxSearch();
}
});
伪代码,但是可以存储在您进行新查询时查询的最后一个已知值。