Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何组合两个jQuery函数的代码以减少执行时间?_Javascript_Php_Jquery_Ajax_Bootstrap Typeahead - Fatal编程技术网

Javascript 如何组合两个jQuery函数的代码以减少执行时间?

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

我有以下两个函数。第一个用于自动完成功能,第二个用于检查用户是否从自动填充列表中选择了值。但是,由于我在这两个函数中使用了相同的AJAX功能,因此在完成执行过程中花费了太多的时间。有人能帮我优化一下我写的代码吗

我的代码如下:

$('.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(){….});