2013-04-16 3 views
2

Мне нужно вызвать две функции в форме submit, но я хочу убедиться, что эта вторая функция выполняется только после выполнения первой функции. У меня нет контроля над первой функцией, поэтому я вообще не могу ее редактировать.Несколько функций в форме submit jQuery

function a(et){ 
    //function a script 
} 

function b(evt){ 

//function b script 
} 

from function b is there a way that i can check if function a was completed or executed fully. 
+0

Таким образом, функция a является асинхронной? – Musa

+0

, вы можете иметь глобальную переменную и установить ее значение в какое-то постоянное значение в функции a..и затем проверить это значение перед вызовом функции b –

+0

. Посмотрите на это, это может вам помочь. http://stackoverflow.com/questions/1370766/how-to-detect-when-one-function-is-complete-from-another-function – jycr753

ответ

0

По Eli Grey вы можете испытания, как это:

function foo() { 
    foo.complete = false; 
    // your code here 
    foo.complete = true; 
} 
foo.complete = false; 

if (foo.complete) { // foo execution complete 
    // your code here 
} 
+0

проблема в том, что я не могу обновить функцию foo(), поэтому как добавить foo.complete =? внутри функции foo() :( – nyshangal

+0

Ну JavaScript имеет один поток выполнения, поэтому, когда функция, которую он вызывает, будет выполняться, поэтому вы можете просто вызвать некоторые события, например setInterval, если этот bool станет истинным, их первая функция, которую он делает, будет зеленой линией для выполнения следующей функции. – jycr753

1

, если у вас есть нет доступа к a на всех тогда вы не можете делать то, что вы хотите сделать здесь. Ни в коем случае: JS создает объект вызова при вызове функции, а auto-GC - при завершении вызова. К сожалению, фактическое управление mem-сервером не работает, поэтому вы не можете это проверить. другой обман включает в себя ваше вмешательство с кодом функции a, о котором вы говорите, что не можете попасть ... так что нет, вы не можете этого сделать.

Извините за это, но, как часто задаваемые вопросы, вы можете не всегда получить ответ, на который вы надеетесь, но это не значит, что ответ вам не нравится, это неправда ...: P


Существует, однако, немного надежды для вас: если обоего функций a и b являются обратными вызовами или обработчиками отправки события, вы могли изучить пути массового обслуживания этих вызовов. Учитывая тег jQuery .queue() suggests itself

0

Да, вы можете, есть много способов сделать это, но вот простой способ сделать это.
Вы можете использовать постоянный объект localStorage.
Вы можете использовать объект сеанса sessionStorage.

function a(evt){ 
    // Asynchronous function 
    // ... your code here 
    // before finish function create the persistent object 
    localStorage.setItem('myObject', 'done'); 
    return; 
} 

function b(evt){ 
    // Checks if a() function was completed 
    var _done = localStorage.getItem('myObject'); 
    if(_done && _done == 'done') { 
    // your code here: the a() function was completed 
    localStorage.removeItem('myObject'); 
    } 
} 
+0

OP не может этого сделать: у него нет доступа к функции 'a'. Также' localStorage' не очень удобен для X-браузера (старые браузеры не поддерживают его) –

+0

Вы можете использовать функцию [jQuery.data()] (http://api.jquery.com/data/) для добавления пользовательских данных в ваши объекты dom. Реализация аналогична приведенный выше пример, вы можете добавить данные в свой объект dom следующим образом: '$ (« # div-response »). data (« myObject »,« done »);' Для удаления данных вы можете использовать [jQuery.removeData()] (http://api.jquery.com/removeData/) следующим образом: '$ (" # div-response "). RemoveData (" myObject ");' – jherax

+0

Зачем использовать jQuery, почему бы не просто 'document.getElementById ('div-response'). SetAttribute ('data-myObject', 'done «);'?Честно говоря, [нет ничего jQ, что нельзя сделать в vanilla JS] (http://stackoverflow.com/questions/16472714/what-features-does-jquery-provide-that-arent-available-natively-in -the-браузеры) –

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