2012-04-16 2 views
0

Я пытаюсь работать на chainability в JQuery плагин, и он прекрасно работает с JQuery clickbelow,JQuery плагина с каждым и готов

$(document).ready(function(){ 


     $('.call-parent').parent_child({ 
      target: '.element' 
     }); 

     $('.call-child-1').click(function(){ 
      $(this).parent_child().child_1(); 
      return false; 
     }); 

     $('.call-child-2').click(function(){ 
      $(this).parent_child().child_2(); 
      return false; 
     }); 

    }); 

(function($) { 

     $.fn.extend({ 

      parent_child: function(options) { 

       var defaults = { 
        target:'' 
       } 

       var options = $.extend(defaults, options); 
       var o = options; 

       var $this = this; 

       var $cm = this.click(function(ei) { 


        alert('parent'); 
        $this.child_1(); 

        return false; 

       }); 


       $this.child_1 = function() { 

        alert('child 1'); 

       }; 


       $this.child_2 = function() { 

        alert('child 2'); 

       }; 

       return $cm; 

      } 
     }) 
    })(jQuery);​ 

, но у меня есть ошибки, когда я использую each или ready в плагине, например,

$(document).ready(function(){ 


     $('.call-parent').parent_child({ 
      target: '.element' 
     }); 

     $('.call-child-1').click(function(){ 
      $(this).parent_child().child_1(); 
      return false; 
     }); 

     $('.call-child-2').click(function(){ 
      $(this).parent_child().child_2(); 
      return false; 
     }); 

    }); 

(function($) { 

     $.fn.extend({ 

      parent_child: function(options) { 

       var defaults = { 
        target:'' 
       } 

       var options = $.extend(defaults, options); 
       var o = options; 

       var $this = this; 

       var $cm = this.each(function(ei) { 


        alert('parent'); 
        $this.child_1(); 

        return false; 

       }); 


       $this.child_1 = function() { 

        alert('child 1'); 

       }; 


       $this.child_2 = function() { 

        alert('child 2'); 

       }; 

       return $cm; 

      } 
     }) 
    })(jQuery);​ 

сообщение об ошибке,

$ this.child_1 не является функцией [Перерыв на этой ошибке]

Почему я не могу сделать это с each или ready? Или я сделал это неправильно?

+1

выражения функций не поднимаются, поэтому, когда вы устанавливаете '$ cm',' $ this.child_1' еще не существует. – Mathletics

+0

получил. Спасибо за ответ. – laukok

ответ

0

Я пересчет мой комментарий в качестве ответа, так что вы можете принять:

Функциональные выражения, как var f = function() { ... } не получают водрузили путь названные объявления функций function f() { ... } сделать. Поэтому в примере each установка $cm вызывает $this.child_1, прежде чем оно будет объявлено. В первом примере функция вызывается при нажатии, поэтому она уже была проанализирована к моменту ее выполнения.

+0

спасибо, что ответ, Mathletics! :-) – laukok

-1

Не используйте $ на своем плагине. Это противоречит использованию jQuery. Используйте что-нибудь еще, a возможно.

+0

'' '' является локальной копией 'jQuery' в плагине; здесь нет конфликта. – Mathletics

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