Apelarea unei funcții JavaScript din alt fișier

28 mar. 2016, 01:58:29
Vizualizări: 32.4K
Voturi: 0

În WordPress, pentru a utiliza $ în loc de prefixul jQuery, am adăugat următorul cod în jurul întregului cod JavaScript:

jQuery(function($) {
    ...
});

Funcționează bine, dar nu pot apela un obiect din alt fișier JavaScript, persistă următoarea eroare:

Slider is not defined

Acesta este codul meu:

file1.js

jQuery(function($) {
    var slider = new Slider();
});    

file2.js

jQuery(function($) {
    function Slider() {
       this.nb_ele = 10;
    }
});

Se pare că din cauză că spațiul de lucru al celor două fișiere JavaScript este diferit, acestea nu pot apela funcții unul din celălalt. Există vreo soluție?

0
Toate răspunsurile la întrebare 2
1

Problema pe care o ai este că Slider nu este accesibil în afara domeniului său de aplicare, deoarece acesta este definit în .ready(), deși ai folosit o formă prescurtată pentru asta. Funcția trebuie să fie disponibilă în domeniul global:

file1.js

function Slider() {
   this.nb_ele = 10;
}

jQuery(function($) {
  // ...
});

file2.js

jQuery(function($) {
    var slider = new Slider();
}); 

Dacă dorești ca Slider să rămână în document ready, va trebui să folosești o expresie de funcție pentru a adăuga funcția obiectului global:

jQuery(function($) {
    window.Slider= function () {
       this.nb_ele = 10;
    };
});

Vezi și: https://stackoverflow.com/questions/1449435/splitting-up-jquery-functions-across-files

28 mar. 2016 04:38:20
Comentarii

Exact asta am nevoie, mulțumesc. Trebuie să folosesc jQuery în funcția Slider, așa că trebuie să rămână în scope-ul jQuery, dar prin adăugarea "window" înaintea numelui funcției, aceasta va fi adăugată la obiectul global.

Trong Lam Phan Trong Lam Phan
29 mar. 2016 02:44:05
0

Am avut aceeași problemă.

O poți rezolva și cu:

var $ = jQuery.noConflict();
$(document).ready(function(){

codul tău aici

});

Trebuie să folosești acest truc în toate fișierele tale JavaScript, adică var $ = jQuery.noConflict();.

După aceea, Dammeul are dreptate.

28 mar. 2016 04:57:38