2016-01-27 4 views
0

У меня есть этот код ниже, с которым у меня проблемы. Я пытаюсь вызвать функцию, созданную внутри функции().Как мне вызвать функцию из другой функции?

HTML

<html> 
<form> 
    <input id="schedtxt" type="number" min="0" step="1" /> 
    <input id="schedSubmit" type="button" value="Submit!" onclick="time(schedtxt)" 
</form> 
</html> 
<style> 

и JS

var schedText = document.getElementById("schedtxt").value; 

function time(schedText) { 
     alert("You have entered "+ schedText.value + " seconds"); 
     UpdateUser(schedText.value); 
} 

(function(){ 
//lotsa var here 
    function UpdateUser(stuff) { 
     //some stuff 
    }); 
    } 
} 

Я стараюсь создал временную функцию внутри функции(), но консоль говорит время() не объявлена, есть что я сделал неправильно?

+0

Это локальная переменная. Он не существует вне его функции. – SLaks

+0

Вы можете привязать его к глобальным или оконным объектам – geckob

+0

Это связано с тем, что когда вы создаете 'время' внутри' (function() {}) ', оно становится локальным для этой области и не будет доступно из глобальной области (это где функция выполняется в вашем встроенном обработчике) –

ответ

0

Вы можете создать экземпляр переменной вне этой сферы и атрибутов функции этой переменной. Это может быть что-то вроде этого:

var schedText = document.getElementById("schedtxt").value; 

// Instantianting the variable outside the scope 
var UpdateUser; 

function time(schedText) { 
    alert("You have entered "+ schedText.value + " seconds"); 
    UpdateUser(schedText.value); 
} 

(function() { 
    //lotsa var here 

    UpdateUser = function (stuff) { 
     //some stuff 
    }; 
}); 
+0

Спасибо, это работает без проблем! – user5844671

0

Функция UpdateUser имеет область действия function(). Вы нуждаетесь в ней вне этой области, поэтому она доступна для функции time.

Измените JavaScript таким образом:

var schedText = document.getElementById("schedtxt").value; 

function time(schedText) { 
     alert("You have entered "+ schedText.value + " seconds"); 
     UpdateUser(schedText.value); 
} 


function UpdateUser(stuff) { 
     //some stuff 
    }) 

(function(){ 
//lotsa var here 

    } 
) 
+0

Есть ли другой способ? Я предпочитаю, чтобы все хранилось внутри (function() {}), включая функцию времени. – user5844671

+0

Это просто вопрос сферы. Если вы хотите, чтобы все это в области функций, тогда определите «время» в той же области. Проведите некоторое исследование в области «javascript scope» для получения дополнительной информации. –

+0

Спасибо, определенно нужно больше узнать об этом. В любом случае, из темы, почему 'function myfunc() {}' отличается от '(function() {})'? Скобки означают что-то? – user5844671

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