Typeahead.js传递动态附加参数

时间:2013-10-15 10:44:17

标签: javascript jquery typeahead.js

假设我有一个使用typeahead.js的多个字段的表单,对于某些文件我希望将以前填充的表单字段中的值作为查询的一部分传递。例如

<input id="First_Name" type="text">
<input id="Last_Name" type="text">

JavaScript的:

$('#Last_Name').typeahead({
  name: 'typeahead',
  remote: 'Search.pl?query=%QUERY'.
  template:[
 ......
  ].join(''),
  engine: Hogan
});

由于我有多个输入框,有些人应该通过ID&amp;作为远程查询的一部分,其他输入框的值,我想知道是否有一种通用的方法来附加ID&amp;仅当字段包含值时,才对此字符串赋值。

提前致谢

2 个答案:

答案 0 :(得分:8)

你可以做到这一点。在设置之前使用replace处理查询字符串。

类似的东西:

$('#Last_Name').typeahead({
  name: 'typeahead',
  remote: {
    url: 'Search.pl?query=%QUERY',
    replace: function(url, uriEncodedQuery) {
      val = $('#First_Name').val();
      if (!val) return url;
      //correction here
      return url + '&first_name=' + encodeURIComponent(val)
    },
  template: ...,
  engine: Hogan
});

答案 1 :(得分:2)

旧主题,但可以使用更详细的答案:

正如 @Shaked 已经说过,你需要使用替换功能

1。如果您想拥有动态参数

在这种情况下,您不需要不属于打字头输入的动态参数。

这种情况不是推荐的情况,因为如果您遇到这种情况,则不需要打印头。

$('#myID').typeahead({
  name: 'typeahead',
  remote: {
    url: 'search.php',
    replace: function(url, uriEncodedQuery) {
      val = $('#yourValue').val();
      if (!val) return url;
      return url + '?param=' + encodeURIComponent(val)
    },
  template: ...,
});

2。如果您想添加动态参数

这个案例更有趣。你想要从其他DOM输入中获取一些不属于Typehead输入的附加参数。

您也需要使用替换,但内容不同:

 $('#myID').typeahead({
      name: 'typeahead',
      remote: {
        wildcard: '%QUERY',
        url: 'search.php?query=%QUERY',
        replace: function(url, uriEncodedQuery) {
          val = $('#yourValue').val();
          if (!val) return url.replace("%QUERY",uriEncodedQuery);
          return url.replace("%QUERY",uriEncodedQuery) + '&param=' + encodeURIComponent(val)
        },
      template: ...,
    });

使用此代码,您将能够获得TypeHead输入+一些其他参数