2012-11-25 21 views
7
(function($) { 
    $.fn.top_islides = function(){ 
     var ajax_init = function(){ 
      init_islides(); 
      setTimeout(function(){picmove()},300); 
     }; 
//..... 
    }; 
})(jQuery); 

wezwanie go w doucument gotowy w innym plikuJak wywołać funkcję w wtyczce jquery?

$('#top_slides').top_islides(); 
$('#top_slides').top_islides().ajax_init(); 

myślałem powinno działać, mam błąd, to w czym problem?

Odpowiedz

5

Czy to tak:

(function($) { 
    //Assuming $.fn.top_islides is defined 
    $.fn.top_islides.ajax_init = function(){ 
     init_islides(); 
     setTimeout(picmove,300); 
    }; 
//..... 
})(jQuery); 

Albo

(function($) { 
    $.fn.top_islides = function(){ 
     var ajax_init = function(){ 
      init_islides(); 
      setTimeout(picmove,300); 
     }; 
     return { 
      ajax_init: ajax_init 
     }; 
    }); 
    //..... 
})(jQuery); 
+1

porządku Mam to działa przez kod dzięki – FatDogMark

3

Spróbuj coś takiego jak w poniższym przykładzie: -

<script type="text/javascript"> 


    $.someplugin = { 
     CallMe : function() { 
      alert("You called?"); 
     }, 
     otherstuff : function() { alert("other stuff!"); } 
    }; 


    $.someplugin.CallMe(); 
    $.someplugin.otherstuff(); 
</script> 
+0

Zmieniłem do \t ajax_init: function() { \t \t \t init_islides(); \t \t \t setTimeout (funkcja() {picmove()}, 300); \t \t}; ale błąd powiedzieć SyntaxError: oświadczenie funkcja wymaga podania nazwy – FatDogMark

0

podczas korzystania var wewnątrz funkcji, to sprawi, że element będzie "prywatny". jest to hackowalny sposób na widoczność w JavaScript, podczas gdy prawdziwa struktura klasowa nie przychodzi do Javascript. Musisz albo ustawić go do prototypu swojej funkcji lub zwrócić obiekt

(function($) { 
    $.fn.top_islides = function(){ 
    var ajax_init = function(){ 
     init_islides(); 
     setTimeout(function(){picmove()},300); 
    }; 
    return { 
     'ajax_init': ajax_init 
    }; 
    //..... 
    }; 
})(jQuery); 

lub

(function($) { 
    $.fn.top_islides = function(){ 
    //..... 
    }; 
    $.fn.top_islides.prototype.ajax_init = function(){ 
    init_islides(); 
    setTimeout(function(){picmove()},300); 
    } 
})(jQuery); 

ale w Twoim przypadku, nie będzie używać prototyp, ponieważ aren” • Tworzenie instancji nowego obiektu top_islides, ale dostęp przez jQuery, więc pierwsza opcja jest najlepsza.

+0

można wyjaśnić nieco więcej o „powrót”, nie rozumiem, jak zadzwonić zwracanej wartości? – FatDogMark

+0

'return' wykonuje swoją nazwę, zwraca coś z funkcji. jeśli chcesz zwrócić więcej niż jedną wartość, musisz użyć obiektu i nazwać każdy zwracany element. Możesz zwracać zmienne, funkcje lub inne obiekty i nazwałbyś je '$ ('elementem'). Top_islides(). Funct()' lub '$ ('element'). Top_islides(). Variable' lub obiekt' $ ('element'). top_islides(). obj.property() ' – pocesar

0

Imo, najlepszym rozwiązaniem jest używany język spustowy, który jest czystsze, ponieważ można utrzymać chainable system wtyczek.

Można zadeklarować obsługi zdarzeń w swojej deklaracji wtyczki i spust z zewnątrz:

(function($) { 
    $.fn.top_islides = function(){ 
    this.on ('init_islides', function(){ 
     setTimeout(function(){picmove()},300); 
    }; 
    //..... 
    }; 
})(jQuery); 
$("button").click(function() { 
    $("p").trigger("init_islides"); 
}); 

DOC można znaleźć tutaj: http://api.jquery.com/on/

Powiązane problemy