Javascript 如何组合两个jQuery函数的代码以减少执行时间?
我有以下两个函数。第一个用于自动完成功能,第二个用于检查用户是否从自动填充列表中选择了值。但是,由于我在这两个函数中使用了相同的AJAX功能,因此在完成执行过程中花费了太多的时间。有人能帮我优化一下我写的代码吗 我的代码如下:Javascript 如何组合两个jQuery函数的代码以减少执行时间?,javascript,php,jquery,ajax,bootstrap-typeahead,Javascript,Php,Jquery,Ajax,Bootstrap Typeahead,我有以下两个函数。第一个用于自动完成功能,第二个用于检查用户是否从自动填充列表中选择了值。但是,由于我在这两个函数中使用了相同的AJAX功能,因此在完成执行过程中花费了太多的时间。有人能帮我优化一下我写的代码吗 我的代码如下: $('.dynamic_cat').keyup(function() { $(".dynamic_cat").typeahead({ source: function(query, process) { var textVal = $(".dy
$('.dynamic_cat').keyup(function() {
$(".dynamic_cat").typeahead({
source: function(query, process) {
var textVal = $(".dynamic_cat").val();
var admin_url = $("#admin_url").val();
$.ajax({
url: admin_url+'modules/product_types/product_types.php',
type: 'POST',
data: 'op=get_all_categories',
dataType: 'JSON',
async: true,
success: function(data) {
process(data);
}
});
}
});
});
$(document).ready(function() {
$('.dynamic_cat').blur(function() {
if( $('.dynamic_cat').val() ) {
var textVal = $(".dynamic_cat").val();
var admin_url = $("#admin_url").val();
$.ajax({
url: admin_url+'modules/product_types/product_types.php',
type: 'POST',
data: 'op=get_all_categories',
dataType: 'JSON',
async: true,
success: function(data) {
if($.inArray(textVal, data) == -1) {
alert("Please select the value from list only!!!");
$('.dynamic_cat').val("");
}
}
});
}
});
});
提前感谢。您可以使用typeahead:selected事件来设置变量,如果从列表中选择了值,请在文本框中键入时重置变量,然后在模糊时,检查变量是否设置为true,否则会提醒用户 比如:
var isItemSelectedFromTypeAhead = false;
$('.dynamic_cat').keyup(function() {
//On keyup reset it
isItemSelectedFromTypeAhead = false;
$(".dynamic_cat").typeahead({
source: function(query, process) {
var textVal = $(".dynamic_cat").val();
var admin_url = $("#admin_url").val();
$.ajax({
url: admin_url+'modules/product_types/product_types.php',
type: 'POST',
data: 'op=get_all_categories',
dataType: 'JSON',
async: true,
success: function(data) {
process(data);
}
});
}
}).on('typeahead:selected', function(obj, selected, name) {
//Something is selected from typeahead
isItemSelectedFromTypeAhead = true;
});
$('.dynamic_cat').blur(function() {
var curValue = $(this).val();
if(curValue !== "" && !isItemSelectedFromTypeAhead)
{
alert("Please select the value from list only!!!");
$('.dynamic_cat').val("");
}
});
只要将AJAX请求的结果保存在一个Javascript变量中,并在两个函数中都使用它,如果它是
!=未定义
。如果未定义,则发出AJAX请求并保存结果。//如果您需要更多或更少的当前数据,您可以使用时间戳变量来扩展它。我尝试了您的代码,但在一个名为blur event的函数中,变量“isItemSelectedFromTypeAhead”的值总是为false。即使我仅从下拉列表中选择值,它也不会更新为true。若我输入的值不是列表中的值,那个么它应该是false。应该如何纠正此问题?能否检查是否调用了事件“typeahead:selected”?您准确地发现了错误和我的观点。我通过在“typeahead:selected”中放置警报进行检查。在我从匹配项列表中选择任何值后,不会调用它。我们该怎么解决这个问题?还是没人打电话。我可以知道您在哪里修改了代码吗?事件绑定部分。它没有关好。on('typeahead:selected',function(){….});