2013-03-24 4 views
0

Я новичок в jQuery, исходя из фона Python и Java, поэтому мне трудно привыкнуть к работе с различными файлами .js. У меня есть файл HTML, который импортирует следующие сценарии:Импорт функций из разных «модулей»

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script 
     src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.js"></script> 
    <script src="{{ STATIC_URL }}/forms.js"></script> 
    <script src="{{ STATIC_URL }}/workout1Alt.js"></script> 

Последние два являются моими. В forms.js, у меня есть общая функция, validateNumberForm, что я хочу, чтобы иметь возможность использовать в моей более конкретной форме workout1Alt.js. подпись форме выглядит следующим образом:

var validateNumberForm = function(id) 

Я призываю validateNumberForm в workout1Alt.js так:

validateNumberForm('#squatsForm'); 

Но я получаю эту ошибку:

Reference Issue: Cannot find variable validateNumberForm. 

Может кто-то показать мне лучшие практики как это сделать?

+0

Код экстракт вы показываете из обоих файлов JS имеет 'validateNumberForm' без' s' в конце, но в вашем описании и в сообщении об ошибке у вас есть 'validateNumberForms' _with_ a' s'. Вы уверены, что правописание написано в обоих файлах? – nnnnnn

+0

опечатка - это согласовано в коде; отредактирован, чтобы отразить это. – user1427661

ответ

1

Я предполагаю, что вы оберточной определение внутри готового обработчика JQuery, как это:

$(function() { 
    var validateNumberForm = function(id) { /* ... */ }; 
    // ... 
}); 

Это делает validateNumberForm только там. Если вы хотите, чтобы быть доступными для других файлов, вы можете переместить его из готового обработчика:

var validateNumberForm = function(id) { /* ... */ }; 
$(function() { 
    // ... 
}); 

Или вы можете явно экспортировать:

$(function() { 
    var validateNumberForm = function(id) { /* ... */ }; 
    window.validateNumberForm = validateNumberForm; 
    // ... 
}); 
+0

Cool. Одна вещь: я предполагаю, что метод window.validateNumberForm не является предпочтительным? Сначала я попытался, но это привело к некоторому странному поведению, которого не было, когда я только что объявил функцию вне блока jQuery. – user1427661

+0

@ user1427661: Правильно; определение его внутри блока 'ready' делает его доступным только при загрузке остальной части страницы. Определение его снаружи делает его доступным, как только загружается этот бит кода. – icktoofay

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