JQuery:Twitter Typeahead功能不匹配

时间:2013-08-03 18:44:09

标签: javascript jquery ruby-on-rails coffeescript typeahead.js

我正在使用typeahead.js将产品ID分配给隐藏的html表单字段。当匹配时,这很有效:

$('.products_tt .typeahead').typeahead
    name: 'products_tt',
    prefetch: 
        url: '/products.json',
        ttl: 60 * 5e3
    template: '<p><strong>{{value}}</strong> – {{year}}</p>',
    engine: Hogan

$('.products_tt .typeahead').on "typeahead:selected typeahead:autocompleted", (e,datum) ->
    $('#disk_file_product_id').val(datum.id)

当输入字段留空时清除隐藏字段:

$('.products_tt .typeahead').blur ->
    if $(this).val().length == 0
        $('#disk_file_product_id').val("")

但是我还需要在输入字段中输入文本时清除隐藏字段,但是没有匹配。

我的Java / Coffeescript技能很弱所以不确定如何做到这一点?!?

2 个答案:

答案 0 :(得分:5)

以下其中一项应该有效:

1)首先进入输入字段的change事件,并在那里清除#disk_file_product_id。如果有选择,您的typeahead事件稍后会再次设置此项。这也可以保存blur回调。

$('.products_tt .typeahead').change ->
    $('#disk_file_product_id').val("")

2)清除#disk_file_product_idopened事件中的closed,而不是字段change事件中的$('.products_tt .typeahead').on "typeahead:opened typeahead:closed" -> $('#disk_file_product_id').val("") 。我不喜欢这个。

{{1}}

答案 1 :(得分:2)

我知道这已经有几个月了,但是你可以这样做:

使用jQuery查看每个keyup事件中DOM中有多少“.tt-suggestions”。如果没有,请清除隐藏字段。

$('.products_tt .typeahead').typeahead({
    name: 'products_tt',
    prefetch: url: '/products.json',
    ttl: 60 * 5e3
    template: '<p><strong>{{value}}</strong> – {{year}}</p>',
    engine: Hogan
}).on("typeahead:selected typeahead:autocompleted", function (e, datum) {
    $('#disk_file_product_id').val(datum.id);
}).on('keyup', function () {
    if($('.tt-suggestion').length === 0){
        $('#disk_file_product_id').val("");
    }
});