2013-04-06 7 views
-5

У меня есть функция сценария java my_func(), которую я бы хотел вызвать при загрузке страницы. Вот странное поведение, что я получаю: Если я вызываю функцию внутри документа готовый не будет работать:

function my_func(){ 
//do something 
} 
$(document).ready(function(){ 
    my_func(); 
}); 

, но если я называю его по событию она работает просто отлично:

function my_func(){ 
//do something 
} 
$(document).ready(function(){ 
    $('#myId').click(function(){ 
     my_func(); 
    }); 
}); 

У кого-нибудь есть идея? как я могу вызвать его внутри документа, готового напрямую?

+3

Что делает эта функция? – VisioN

+2

Где находится 'my_func'? – pdoherty926

+0

Вы, вероятно, будете делать: 'my_func = function() {...' вместо 'function my_func() {...'. Есть разница. – 2013-04-06 22:26:09

ответ

1

Ваша проблема в том, что dijit.form.TextBox не был загружен, когда загрузилась остальная часть DOM. Вам нужно изменить свой код my_func включить вызов require:

function my_func() { 
    require(['dijit/form/TextBox'], function(TextBox) { 
     // ... 
     var newBox = new TextBox(); 
     // ... 
    }); 
} 

Вы должны сделать это для каждого класса Dojo. Например, если вам также необходимо dijit.form.Button:

function my_func() { 
    require(['dijit/form/Button', 'dijit/form/TextBox'], function(Button, TextBox) { 
     // ... 
    }); 
} 

Это немного жаль, что именно это многословен, но это так, как оно идет. Более подробную информацию о require можно получить в Dojo's documentation.

+0

это действительно решает! : D спасибо большое. Я думал, что этого достаточно, если я положу требование в html-заголовок, но, похоже, этого было недостаточно! спасибо еще раз ... – Amin

+0

@Amin: Раньше было так, что вы могли просто использовать 'dojo.require' наверху, и он будет синхронно загружать любые нужные вам модули, но это делает страницу невосприимчивой, поэтому в более новых версиях она был заменен асинхронным «требованием», который, к сожалению, требует некоторых изменений в существующем коде. – icktoofay

0

Проблема заключается в том не положить функции внутри $(document).ready(), смотрите ниже:

Работа скрипку:

http://jsfiddle.net/whFNj/1/

$(document).ready(function(){ 
    my_func(); 
}); 

function my_func(){ 
$("#black").css("background", "black"); 
} 

Вместо этого, она может быть ваша функция создается где-то еще в вашем коде, и он не инициализируется к тому времени, когда dom готов.

+0

Спасибо за ответ, я знаю, что простая функция вроде этого отлично работает. Я не мог определить функцию вне области действия, так как, как я уже сказал, я могу назвать ее внутри $(). Click(), и она будет работать нормально. Мой вопрос именно в этом, что может быть так, что я не могу назвать эту функцию внутри готовой функции, пока я могу вызвать ее внутри функции внутри готовой функции !!! – Amin

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