Cakephp с Ajax, this.element.setAttribute не является функцией - PullRequest
2 голосов
/ 11 августа 2011

Я пытаюсь сделать систему стековых потоков похожей на теги. Я следовал этому уроку (на французском): http://www.formation -cakephp.com / 34 / autocomplete-en-ajax , который использует Prototype и Scriptaculous. Конечно, я адаптировал его к своему проекту

Я получаю следующую ошибку:

this.element.setAttribute is not a function : controls.js Line 86

, что соответствует

this.element.setAttribute('autocomplete','off');

в файле control.js

Я действительно новичок в Ajax, поэтому понятия не имею, что делаю (неправильно) ...

Если вам нужен код из любого файла, дайте мне знать!

view.ctp:

<div class="input">
<label>Tags :</label>
<?php e($ajax->autoComplete(
    'Tag.tag',
    '/tags/autocomplete',
    array(
        'minChars' => 3,
        'indicator' => 'ajaxloader'
    )
)); ?> 
<div id="ajaxloader" style="display:none;">
    Chargement...
</div>

Контроллер:

function autocomplete()
{
    $recherche = utf8_decode($this->data['Tag']['tag']);

    $tags = $this->Tag->find(
        'all',
        array(
            'fields' => 'DISTINCT tag',
            'conditions' => "tag LIKE '$recherche%'",
            'order' => 'tag',
            'limit' => 10
        )
    );

    $this->set(compact('tag', 'recherche'));
}

Ответы [ 2 ]

0 голосов
/ 29 июля 2015

jQuery, scriptaculous и prototype плохо взаимодействуют друг с другом, но вы можете решить эту проблему, переведя jQuery в бесконфликтный режим.

var $j = jQuery.noConflict(); // $j is now an alias to the jQuery function; creating the new alias is optional.

Теперь вместо использования $ to для jQuery используйте $j, например, так:

$j(document).ready(function() { $j( "div" ).hide(); });

Для получения дополнительной информации об избежании конфликтов jQuery см. Следующее: https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

0 голосов
/ 01 декабря 2012

Похоже, что scriptaculous плохо работает с j-запросом. Когда я удалил ссылку j-query, я перестал получать сообщение об ошибке. Это определенно не идеальное решение, но я решил поделиться своим открытием.

...