Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с самописанным плагином. (https://javascript.ru/forum/jquery/23847-problema-s-samopisannym-plaginom.html)

ArmagedDance 08.12.2011 19:11

Проблема с самописанным плагином.
 
Написал плагинчик jquery:

$.fn.informer = function(options){
	  // настройки по умолчанию
	  var options = $.extend({
	    alertMessage: 'Внимание!',
        timeOut: 3000
	  },options);
	  return this.each(function() {
$('<div>', {id: 'informDIV',
            css: {
              zIndex: 10000,
                color: 'black',
                backgroundColor: '#ccc'
            },
            html: alertMessage
        }).appendTo('body');
        var hideInformer=setTimeout(function(){
   $('#informDIV').hide();
	  }, timeOut);
      });
	};

Вызываю из скрипта:
$.informer({alertMessage: 'Внимание!', timeOut: 3000});

Предварительно подключил перед выводом файл jquery.informer.js

В ответ получаю: Ошибка: $.informer is not a function
Что может быть не так?

devote 08.12.2011 19:15

$.fn.informer = function(options){
то
$.informer = function(options){

devote 08.12.2011 19:17

либо ваш плагин нужно вызывать так:
$(".elem").informer({alertMessage: 'Внимание!', timeOut: 3000});

ArmagedDance 08.12.2011 19:35

Мде, предупреждения об ошибках пропали, а результата нет (ожидал увидеть появление дива с текстом внимание и исчезновение его через 3 секунды). Собственно, в firebug новоиспеченный див тоже отсутствует...

ArmagedDance 08.12.2011 20:25

$.fn.informer = function(option){
	var settings=$.extend({
    alertMessage: 'Внимание!',
    timeOut: 3000
  }, option);
	  return this.each(function(){alert(alertMessage);});
	};

Даже простейший вот такой плагин не работает. Что ж так сложно то все...

devote 08.12.2011 20:35

<div class="test_div"></div>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$.fn.informer = function(option){ 
    var settings = $.extend({ 
            alertMessage: 'Внимание!', 
            timeOut: 3000 
        }, option);

    return this.each(function(){
        alert(settings.alertMessage);
    });
};

$(".test_div").informer();

$(".blabla").informer(); // не сработает, потому что не найдет ни одного элемента с которым плаг может работать

</script>

ArmagedDance 08.12.2011 20:38

Благодарю!)

ArmagedDance 08.12.2011 20:47

$.fn.informer = function(option){
	var settings=$.extend({
    alertMessage: 'Внимание!',
    timeOut: 3000
  }, option);
	  return this.each(function(){
	    $(this).html(settings.alertMessage);
        setTimeout(function(){
          $(this).hide();
        }, settings.timeOut);
	});
    }

Блок с текстом появляется. А почему не получается его спрятать посредством setTimeout? Выдается ошибка a.ownerDocument is undefined

devote 08.12.2011 21:14

$.fn.informer = function(option){ 
    var settings=$.extend({ 
    alertMessage: 'Внимание!', 
    timeOut: 3000 
  }, option); 
      return this.each(function(){ 
        var self = this;
        $(this).html(settings.alertMessage); 
        setTimeout(function(){ 
          $(self).hide(); 
        }, settings.timeOut); 
    }); 
    }


Часовой пояс GMT +3, время: 22:38.