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

chiamata in doucument pronto in un altro fileCome chiamare la funzione nel plugin jquery?

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

ho pensato che dovrebbe funzionare, ho ottenuto un errore, qual è il problema?

risposta

5

fare in questo modo:

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

O

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

okay ho capito funziona con il tuo codice grazie – FatDogMark

3

provare qualcosa di simile, come nell'esempio seguente: -

<script type="text/javascript"> 


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


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

ho cambiato \t ajax_init: function() { \t \t \t init_islides(); \t \t \t setTimeout (function() {picmove()}, 300); \t \t}; ma error error SyntaxError: function statement richiede un nome – FatDogMark

0

quando si utilizza var all'interno di una funzione, è renderà l'elemento "privato". è un modo hacky per fare visibilità in Javascript, mentre la vera struttura di classe non arriva a Javascript. È necessario impostarlo al prototipo della funzione o per restituire un oggetto

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

o

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

ma nel tuo caso, non sarà possibile fare uso di prototipo, dal momento che si aren' t istanziando un nuovo oggetto top_islides, ma accedendo tramite jQuery, quindi la prima opzione è la soluzione migliore.

+0

puoi spiegare un po 'di più su' return ', non capisco, come chiamare il valore restituito? – FatDogMark

+0

'return' fa come deve essere il suo nome, restituisce qualcosa dalla funzione. se si desidera restituire più di un valore, è necessario utilizzare un oggetto e denominare ciascun elemento di ritorno. Puoi restituire variabili, funzioni o altri oggetti e lo chiameresti '$ ('elemento'). Top_islides(). Funct()' o '$ ('elemento'). Top_islides(). Variable' o un oggetto' $ ('elemento'). top_islides(). obj.property() ' – pocesar

0

Imo, la soluzione migliore viene utilizzata come trigger che è più pulito perché è possibile mantenere il sistema di plugin concatenabile.

È possibile dichiarare gestore di eventi nella vostra dichiarazione di plug-in e di innesco dall'esterno:

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

DOC può essere trovato qui: http://api.jquery.com/on/

Problemi correlati