2011-01-29 3 views
2

Я использую jQuery UI autocomplete для выпадающего списка html. Чтобы отобразить выпадающий список, я должен использовать hack. Этот хак вызван, когда загружается javascript (чего я не хочу). У меня этот код в другом файле, и мне не всегда нужно использовать метод автозаполнения.jQuery UI autocomplete custom html

Вот мой код:

Просмотр:

<input id="project"/> 
<div id="tmp" style="display: none;"></div> 

<script type="text/html" id="templateHolder">  
    <a> 
    {$T.value} 
    <br /> 
    {$T.label} 
    </a> 
</script> 

script.js

$(function() {  

    var projects = [ 
     { 
      value: "jquery", 
      label: "jQuery" 
     }, 
     { 
      value: "jquery-ui", 
      label: "jQuery UI" 
     } 
     ]; 

    $("#project").autocomplete({ 
    minLength: 0, 
    source: projects, 
    focus: function (event, ui) { 
     $("#project").val(ui.item.label); 
     return false; 
    }, 
    select: function (event, ui) { 
     $("#project").val(ui.item.label); 

     return false; 
    } 
    }).data("autocomplete")._renderItem = function (ul, item) { 
     var tmp = $("<div>").setTemplate($("#templateHolder").html()); 
     tmp.processTemplate(item); 
     $("<li></li>").data("item.autocomplete", item) 
         .append($(tmp).html()) 
         .appendTo(ul); 
     return; 
    }; 
}); 

.data('autocomplete') раздел хак. Есть ли способ обойти это, когда нет автозаполнения (нет #project), он не бросает ошибку javascript?

Также: Если на странице 2 автозаполнения, работает только первый.

ответ

2

Просто применить autocompleter если #project существует, которая может быть определена путем проверки length свойства объекта JQuery, образованном селектор:

if($("#project").length) { 
    $("#project").autocomplete({... 
} 

Если вы собираетесь иметь более одного autocompleter, то вы потребуется другой селектор, поскольку дублирующиеся идентификаторы вызывают проблему только первого. Например .:

if($(".project").length) { 
    $(".project").autocomplete({... 
} 

На одной странице не должно содержать каких-либо повторяющихся идентификаторов в соответствии с specification.

+0

сладкий, это решает обе проблемы. –