使用数据短划线属性初始化预先输入源

时间:2015-10-13 11:44:51

标签: javascript twitter-bootstrap typeahead.js

我的typeahead元素有一些数据属性,用于定义要发送到我的服务的url,字段和其他参数。

我正在尝试在源函数中访问这些数据属性,但没有运气。

我的typeahead元素定义如下:

<input class="typeahead" type="text" data-url="some_url.json">

我初始化typeahead的javascript是这样的:

$("body").find('.typeahead').typeahead(null, {
    displayKey: 'name',
    source: getSource()        
})  

function getSource(){
    var my_url = ???????

    return new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.whitespace,
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
                url: my_url,
                wildcard: '%QUERY'
              }
        });
}

“getSource”函数中的“this”变量指向“window”。 还有另一种方法可以做到这一点,或者我需要为每种类型的类型定义一个初始化吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我在激活之前简单地遍历typeahead元素:

$(".typeahead").each(function(){
    var url = $(this).data("url");
    $(this).typeahead(...);
  })

答案 1 :(得分:0)

您可以初始化空的预先输入并使用&#34; typeahead:active&#34;事件初始化:     $(&#34;选择器&#34)。预输入()       .on(&#34; typeahead:active&#34;,function(){           var url = $(this).data(&#34; url&#34;);

      //destroy old typeahead
      $(this).unbind("typeahead:active"); 
      $(this).typeahead("destroy");

      //reconstruct typeahead again
      $(this).typeahead(null,
          {
            displayKey: xxx,
            source: url
          });
  }

请记住,当你&#34;销毁&#34;你的控制,它回滚到原始元素。所以有些东西可能会丢失,就像焦点一样。

另一个问题是此事件将在新控件中再次触发。所以你需要解开这个事件。