2016-12-22 6 views
1

У меня есть большое количество функций, которые привязаны к различным элементам.Как исправить эту ошибку в javascript

Следовательно, я решил определить все мои функции в одном файле &, а затем позвонить из другого файла.

HTML

<!DOCTYPE html> 

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
<title>Index</title> 
<script src="~/js/jquery.min.js"></script> 
<script src="~/js/functions.js"></script> 
<script src="~/js/site.js"></script> 
</head> 
<body> 
<div> 
    Hello!! This is a sample page 
</div> 
</body> 
</html> 

functions.js

$(document).ready(function (e) { 
//like this I have 50+ functions 
function GetCustomers() 
{ 

    //ajax call. 
} 

}); 

site.js

$(document).ready(function (e) { 
GetCustomers(); 
}); 

Но это метание ошибку ниже.

Error

Uncaught ReferenceError: GetCustomers is not defined

ответ

2

Не используйте эту функцию внутри документа.

$(document).ready(function (e) { 

function GetCustomers() 
{ 

//ajax call. 
} 

}); 

Используйте как

<script> 

function GetCustomers() 
{ 

//ajax call. 
} 
</script> 
+0

Есть ли способ лучше сделать то же самое ?? –

+0

вы можете использовать снаружи. функция GetCustomers() {// ajax call. } – vel

+0

Это рендеринг ..Спасибо –

1

Там нет необходимости, чтобы обернуть все свои функции в $(document).ready и это ваша проблема. Две проблемы:

  1. .ready не жарь, так что код не выполняется (и поэтому ваши функции не созданы)
  2. , так как вы делаете это в .ready ваш не является обязательным вашей функции к окну, и поэтому они не могут быть доступны нигде.
2

Удалите упаковочный $ (документ) .ready() из вашего functions.js

4
$(document).ready(function (e) { 
//like this I have 50+ functions 
function GetCustomers() 
{ 

    //ajax call. 
} 

}); 

Вы определяете функцию внутри готового обработчика, сохраняя его локальным для этой сферы. Переместите его снаружи (или просто избавитесь от $(document).ready()), так что это в глобальном масштабе. См. Документацию по области видимости функций.

Если вы не хотите, чтобы добавить все эти функции в глобальном масштабе, вы можете создать глобальный объект, и добавить их в качестве методов:

var app = { 
    getCustomers: function(){}, 
    ... 
}; 
+0

Userful Ссылка добавлена. Спасибо :) –

+0

Есть ли лучший способ сделать то же самое. Так как это приведет к глобальному пространству имен окна –

+1

Вы можете создать объект. См. Обновление. – Scimonster

0

поджать GetCustomers из document.ready функция.

0

не используют GetCustomers внутри document.ready в functions.js Intead напрямую определяют функцию, если вы определяете в отдельном файле.

1

написать функцию из стороны в document.ready()

<script> 
    function GetCustomers() 
    { 
     //your code. 
    } 
</script>