2013-08-17 5 views
2

Я пытаюсь создать пользовательский элемент меню ui-menu-item с помощью функции _renderItem, но после попытки может не получиться, что функция будет вызвана. Автозаполнение работает, но это похоже на функцию _renderItem. Вот мой сценарий scctionJQuery _renderItem не называется

<script language="Javascript" type="text/javascript"> 
    function split(val) { 
    return val.split(/,\s*/); 
} 
function extractLast(term) { 
    return split(term).pop(); 
} 

$j(document).ready(function() { //START of ready function 
$j("#custom-report") 
.autocomplete({ 
source: function(request, response) { 
$j.getJSON("<?=$this->url(array("controller"=>"report", "action"=>"custom-autocomplete"))?>", { 
term: extractLast(request.term) 
}, response); 
}, 

search: function() { 
//Place holder 
}, 

focus: function (event, ui) { 
     // Prevent the default focus behavior. 
     event.preventDefault(); 
}, 

select: function(event, ui) { 
var terms = split(this.value); 
terms.pop(); 
terms.push(ui.item.value); 
this.value = terms.join(", "); 
return false; 
} 
}).data("autocomplete")._renderItem = function (ul, item) { 
     return $("<li />") 
      .data("item.autocomplete", item) 
      .append("This is the text") 
      .addClass("tip") 
      .attr("desc", "This is the description") 
      .appendTo(ul); 
    }; 
}); //END of ready function 
</script> 

У кого-нибудь есть идеи, почему это не работает?

+0

Какой смысл использования AJAX со встроенным PHP? Является ли '$ this-> url' действительным JSON? Проверьте [wp_localize_script] (http://codex.wordpress.org/Function_Reference/wp_localize_script), который позволит вам передавать переменные клиенту, чтобы вы могли отделить ваш JS от PHP. – elclanrs

+0

Да, это все работает, за исключением того, что полностью игнорирует функцию _remderItem. Это включено в приложение Zend PHP. – Alex

+0

. Какую версию jquery ui вы используете? –

ответ

3

Это зависит от версии пользовательского интерфейса jQuery, в новой версии изменена объектная модель (см.: http://jqueryui.com/upgrade-guide/1.10/#autocomplete).

Пример на сайте пользовательского интерфейса jQuery основан на jQuery UI 1.10.

1,9 и минора:

.data("autocomplete")._renderItem = function (ul, item) { 
     return $("<li />") 
      .data("item.autocomplete", item) 
      .append("This is the text") 
      .addClass("tip") 
      .attr("desc", "This is the description") 
      .appendTo(ul); 
    }; 

1.10 и следующий:

.data("ui-autocomplete")._renderItem = function (ul, item) { 
     return $("<li />") 
      .data("ui-autocomplete-item", item) 
      .append("This is the text") 
      .addClass("tip") 
      .attr("desc", "This is the description") 
      .appendTo(ul); 
    }; 
3

Я закончил тем, что сделать это

$.ui.autocomplete.prototype._renderItem = function (ul, item) { 
    return $("<li></li>") 
    .data("item.autocomplete", item) 
    .addClass("tip ui-menu-item") 
    .append("<a>" + item.label + "</a>") 
    .attr("desc", item.description) /* This is the filed that started the whole thing */ 
    .attr("role", "presentation") 
    .appendTo(ul); 
};