2016-08-16 2 views
0

Можно ли вызвать функцию, которая находится в одном файле js, и обнародована с помощью шаблона iife, в другом файле js? Например, это какой-то validationScript.js файл:Вызов функции из другого js-файла при использовании шаблона iife?

var ValidationNamespace = function() 
{ 
    var nameValidation = ""; 
    var testValidation = ""; 

    return{ 
     validateIfNameAlreadyExistsInTable : function(currentNameValues) 
     { 
      for(var i=0; i < currentNameValues.length ; i++) 
      { 
       if(document.getElementById("tbName").value == currentNameValues[i]) 
       { 
        var nameVal = "Name already exists in table!"; 
        document.getElementById("nameVal").innerHTML = nameVal; 
        return false; 
       } 
      } 
      document.getElementById("nameVal").innerHTML = ""; 
      return true; 
     } 
    }; 
}(); 

И у меня есть еще один файл, позволяет сказать script.js

Есть ли какой-нибудь способ, чтобы вызвать функцию validateIfNameAlreadyExistsInTable от некоторой функции script.js?

Проблема заключается в том, что оно не определено, когда я пытаюсь вызвать его:

enter image description here

У меня есть index.html, где я ссылки как .js файлы, как это:

<script type="text/javascript" src="script.js"></script> 
<script type="text/javascript" src="validationScript.js"></script> 
+0

'ValidationNamespace' возвращает' object'. Используйте 'ValidationNamespace.validateIfNameAlreadyExistsInTable' – Rayon

ответ

1

Да, потому что IIFE возвратил объект, который предоставляет функцию, и файл сохраняет этот объект как ValidationNamespace, который является объявленным глобально глобальным значением var.

Итак:

ValidationNamespace.validateIfNameAlreadyExistsInTable(theName); 

Re ваши изменения, вы, вероятно, хотите, чтобы загрузить сценарии в другом порядке, первый validationScript.js затем script.js:

<script type="text/javascript" src="validationScript.js"></script> 
<script type="text/javascript" src="script.js"></script> 

скрипты загружаются и выполняются в порядке (если вы не используете async или defer). Поэтому, если ваш код в script.js не ждет какого-либо другого события, он будет запущен до загрузки validationScript.js.

+0

Спасибо, что ответили, что я сделал с I и мной одну ошибку, заявив, что ValidationNamespace не существует. Я уточню свой вопрос с дополнительной информацией. @ T.J.Crowder –

+0

@ nemo_87: Вам нужно сделать это * после того, как был загружен другой скрипт. Помимо этого, он гарантированно работает, если другое не назначает другое значение этой переменной (или свойству) позже. –

+0

Oooh, так что я вижу, мне нужно сначала загрузить validationScript и script.js. Это имеет смысл! Спасибо :) @ T.J.Crowder –

0

Я думаю, что это должно сработать. ValidationNamespace(). ValidateIfNameAlreadyExistsInTable (theName);

+0

'ValidationNamespace' не является функцией, поэтому попытка вызвать ее вызовет ошибку. –

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