2013-03-30 27 views
0

的结果我可以使用下面的代码,以允许用户只填写表单时选择的自动完成选项之一,完美的作品:如何“名”的Ajax调用

var validOptions = ["Bold", "Normal", "Default", "100", "200"] 
previousValue = ""; 

$('#ac').autocomplete({ 
    autoFocus: true, 
    source: validOptions 
}).keyup(function() { 
    var isValid = false; 
    for (i in validOptions) { 
     if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) { 
      isValid = true; 
     } 
    } 
    if (!isValid) { 
     this.value = previousValue 
    } else { 
     previousValue = this.value; 
    } 
}); 

然而,我使用ajax来创建阵列,如下所示,所以我没有名称阵列eg如上所述的validOptions

问题如何使用上述“办法”与下面的方法

$('#ac').autocomplete({ 
    autoFocus: true, 
    source: "/pages/includes/getAgent.php", 
    select: function(event, ui) { 
     $('#autoc1').val(ui.item.agent_name); 
     $('#comm').val(ui.item.commission_percent); 
     return false; 
    } 
    }).keyup(function() { 
     var isValid = false; 

     // here is the issue, the new data is not called validOptions 
     for (i in validOptions) { 
     if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) { 

      isValid = true; 
     } 
    } 
     if (!isValid) { 
      this.value = previousValue 
     } else { 
      previousValue = this.value; 
     } 
    }).data("ui-autocomplete")._renderItem = function(ul, item) { 
     return $("<li>") 
     .append("<a>" + item.agent_name + "</a>") 
     .appendTo(ul) 
    }; 
+0

其中* *存储的数据呢?为什么不能使用'validOptions'来存储数据? – JJJ

+0

@Juhana数据存储在一个Mysql表中,并使用自动完成功能 –

回答

1

您将无法使用keyup事件。相反,您需要设置source才能运行并创建您自己的AJAX请求。内的有效性,或具有不同特性的识别结果的数设置服务器侧返回JSON返回的结果的该请求的测试长度的回调和结果本身

Remote Data with cache Demo见源代码作为例如用于source函数创建自己的AJAX

您可能希望设置错误指示符和/或调整您的自定义_renderItem方法以显示No results,而不是更改输入的值,这是用户意外的行为。这将允许用户查看输入的内容以防万一是一个错字。

另一种方式来显示no results是AJAX回调中操纵数据,如果没有返回的值