6

假设我有一个使用 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 和值作为远程查询的一部分传递,我想知道是否有一种通用方法仅在字段包含时才将 ID 和值附加到该字符串中 values

提前致谢

4

2 回答 2

8

你可以这样做。使用 areplace在设置查询字符串之前对其进行处理。

就像是:

$('#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
});
于 2013-10-17T06:02:05.910 回答
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 输入 + 一些附加参数

于 2017-01-05T12:02:00.477 回答