2016-02-19 8 views
0

Я пытаюсь добавить пользовательский плагин jquery. Но я получаю ошибку jQuery (...). Терминатор не является функцией .... Я уверен, что ошибок нет в кодеjQuery пользовательский плагин в joomla не работает

Для просто теста я попытался скопировать код с изучения. jquery.com

(function($) { 
    $.fn.greenify = function() { 
     this.css("color", "green"); 
     return this; 
    }; 
}(jQuery)); 

, а затем

jQuery('..').greenify(); 

который возвращает меня ошибка JQuery ('..'). greenify не является функцией

Что происходит ??? Кто-нибудь знает причину этого?

EDIT

больше код. Это зеленоватая вещь была просто для того, чтобы показать, что она не работает на стандартном примере ....

фактический плагин ... Он размещен в настоящее время только в том же файле, где позже он называется на ellements, поэтому проблем нет с файлом не найден ..

(function($) { 
    $.fn.termifier = function(options) { 
    options = $.extend({ 
     lookupResource: 'getTerm', 
    flyoutClass: 'lookerUpperFlyout' 
    },options||{}); 

    this.attr('title','Click me for my definition!'); 

    return this.click(function(event){ 
    $.ajax({ 
     url: options.lookupResource, 
     type: 'get', 
     data: {term: this.innerHTML}, 
     dataType: 'html', 
    success: function(data) { 
     $('<div></div>') 
     .css({ 
      position: 'absolute', 
      left: event.pageX, 
      top: event.pageY, 
      cursor: 'pointer', 
      display: 'none' 
     }) 
     .html(data) 
     .addClass(options.flyoutClass) 
     .click(function(){ 
      $(this).fadeOut(1500,function(){$(this).remove();}); 
     }) 
     .appendTo('body') 
     .fadeIn(); 
     } 

    }); 
    return false; 
    }); 
}; 
    }(jQuery)); 


jQuery(document).ready(function(){ 
... 
jQuery('abbr').termifier({ 
    lookupResource: 'some.php' 
    }); 

}); 

Я довольно невежествен ...

ответ

0

Во-первых, убедитесь, что вы импорта JQuery с помощью API Joomla в, например, так:

<?php 
    JHtml::_('jquery.framework'); 
?> 

Это гарантирует, что импортируется только 1 экземпляр jQuery и в режиме noConflict.

После этого, вы должны использовать jQuery глобальный масштаб и $ в качестве псевдонима (по желанию):

jQuery(document).ready(function($){ 
    $.fn.greenify = function() { 
     this.css("color", "green"); 
     return this; 
    }; 
}); 

Надеется, что это помогает

+0

Спасибо! Ваш ответ сработал! Я включил плагин внутри документа, и он работает ... Но я до сих пор не понимаю, почему. Это должно нормально работать, если оно установлено за пределами дома? И в случае, если я хочу загрузить его отдельно в другом файле ??? –

+0

Joomla использует Mootools, поэтому '' ', который мы обычно используем, иногда вызывает конфликты между сценариями jQuery и Mootools. Вот почему мы используем 'jQuery' как глобальную область и' $ 'только как псевдоним. Это не будет работать за пределами DOM Ready, потому что это плагин jQuery. – Lodder

+0

Да, я понимаю, поэтому мы используем функцию noConflict(), которая также является стандартной частью jdoc: include type = "head".) После использования этого функцию вы не можете использовать $, чтобы вызывать jQuery в любом случае, вы не должны указывать его как jQuery. Вот почему мы помещаем jQuery (document) .ready() .... вместо $ (document) .ready(). Но если я поместил jQuery.fn.greenify = .... заменил все псевдонимы на jQuery - это тоже не будет работать вне jQuery (document) .ready() ... вот что меня озадачило. Может ли это быть проблемой конфликта в namespacies ???? –

0

Это работает, но я думаю, что вы используете greenify(), прежде чем вы добавили функциональность.

Можете ли вы показать нам больше кода?

(function ($) { 
 

 
    $.fn.greenify = function() { 
 
     this.css("color", "green"); 
 
     return this; 
 
    }; 
 

 
    }(jQuery)); 
 
    
 
jQuery('#test').greenify();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p id="test"> 
 
    Black text? 
 
</p>

+0

Да, я использую его так же, как ваш пример показывает. Но к моему разочарованию это просто не сработает ... Я отредактирую вопрос для большего количества кода ... –

0

Я предполагаю, что вы пытаетесь вызова JQuery ('..') greenify(). перед загрузкой плагина.

Вы добавляете, если документ будет готов - вызвать плагин так же

(function($) { 
    $.fn.greenify = function() { 
     this.css("color", "green"); 
     return this; 
    }; 
}(jQuery)); 
$(function() { 
    jQuery('..').greenify(); 
}); 
+0

Я добавляю плагин снаружи (прямо перед тем, в том же файле) jQuery (document) .ready (function () {... jQuery ("# ​​test"). greenify(); ...}); –

Смежные вопросы