При попытке использовать фокус или выбрать функцию автозаполнения в jquery, я всегда получаю ui.item как неопределенное, даже если у меня есть результаты загрузки из автозаполнения.Это странно, поскольку у меня есть точная функция, работающая на другой странице.Я не уверен, почему это не определено, поскольку у меня есть результаты.Я использую CakePHP 3.4 и прикрепил соответствующий вид и функции контроллера ниже.Я использую jquery 3.3.1 и jquery ui 1.12.1.
Это сообщение об ошибке появляется при наведении курсора мыши на элемент списка.
add:539 Uncaught TypeError: Cannot read property '0' of undefined
at HTMLInputElement.focus (add:539)
at $.(anonymous function).(anonymous function)._trigger (https://code.jquery.com/ui/1.12.1/jquery-ui.js:697:13)
at $.(anonymous function).(anonymous function).menufocus (https://code.jquery.com/ui/1.12.1/jquery-ui.js:5827:25)
at HTMLUListElement.handlerProxy (jquery-ui.js:606)
at HTMLUListElement.dispatch (VM118502 jquery-3.3.1.js:5183)
at HTMLUListElement.elemData.handle (VM118502 jquery-3.3.1.js:4991)
at Object.trigger (VM118502 jquery-3.3.1.js:8249)
at HTMLUListElement.<anonymous> (VM118502 jquery-3.3.1.js:8327)
at Function.each (VM118502 jquery-3.3.1.js:354)
at jQuery.fn.init.each (VM118502 jquery-3.3.1.js:189)
focus @ add:539
_trigger @ jquery-ui.js:697
menufocus @ jquery-ui.js:5827
handlerProxy @ jquery-ui.js:606
dispatch @ jquery-3.3.1.js:5183
elemData.handle @ jquery-3.3.1.js:4991
trigger @ jquery-3.3.1.js:8249
(anonymous) @ jquery-3.3.1.js:8327
each @ jquery-3.3.1.js:354
each @ jquery-3.3.1.js:189
trigger @ jquery-3.3.1.js:8326
_trigger @ jquery-ui.js:695
focus @ jquery-ui.js:5318
(anonymous) @ jquery-ui.js:144
mouseenter .ui-menu-item @ jquery-ui.js:5035
handlerProxy @ jquery-ui.js:606
handle @ jquery-3.3.1.js:5536
dispatch @ jquery-3.3.1.js:5183
elemData.handle @ jquery-3.3.1.js:4991
trigger @ jquery-3.3.1.js:8249
(anonymous) @ jquery-3.3.1.js:8327
each @ jquery-3.3.1.js:354
each @ jquery-3.3.1.js:189
trigger @ jquery-3.3.1.js:8326
(anonymous) @ jquery-ui.js:5819
fn @ jquery-3.3.1.js:4932
dispatch @ jquery-3.3.1.js:5183
elemData.handle @ jquery-3.3.1.js:4991
Это моеadd.ctp для счетов-фактур скрипт для автозаполнения находится внизу
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<?php echo $this->Html->css('//code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css'); ?>
<?php use Cake\Routing\Router; ?>
<?= $this->Form->create($invoice) ?>
<fieldset>
<?php
echo $this->Form->input('id', ['type' => 'hidden', 'id'=>'id']);
echo $this->Form->hidden('invoice_to_id', ['options' => $customers, 'empty' => true,'id'=>'customers']);
echo $this->Form->input('name', ['type' => 'text', 'id'=>'name', 'label'=>'Invoice to Customer']);
echo $this->Form->input('invoice_address', ['type' => 'text', 'id'=>'invoice_to_address']);
?>
</div>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
<script>
jQuery('#name').autocomplete({
delay: 0,
minLength: 2,
source: '<?php echo Router::url(array('controller' => 'Customers', 'action' => 'Search')); ?>',
focus: function( event, ui ) {
console.log("%o", ui.item); //always seems to be undefined even results show
$( "#name" ).val( ui.item[0] );
return false;
},
select: function( event, ui ) {
$( "#invoice_to_address" ).val( ui.item[1] );
$( "#ship_to_address" ).val( ui.item[2] );
return false;
}
})
.autocomplete( "instance" )._renderItem = function( ul, item ) {
return $( "<li>" )
.append( "<div>" + item[0] + "</div>" )
.appendTo( ul );
};
</script>
, это функция поиска контроллера моих клиентов.
public function search()
{
if ($this->request->is('ajax'))
{
$name = $this->request->query['term'];
$resultArr = $this->Customers
->find()
->where(
['Customers.name LIKE' => ('%' . $name . '%')]
);
$resultsArr = [];
foreach ($resultArr as $result)
{
$resultsArr[] = [$result['name'], $result['address'], $result['postal_address'], $result['currency_id'], $result['gst_percentage']];
}
$this->set(array(
'name' => $resultsArr,
'_serialize' => 'name'
));
}
}