2013-04-20 3 views
-5

У меня есть функция в javascript, которая состоит из вызова ajax. Назовем его search();Вызов метода, когда другой заканчивается

Тогда у меня есть событие onKeyUp.

В событии onKeyUp у меня есть функция enterPressed().

Я хочу называть эту функцию ПОСЛЕ поиска() заканчивается.

Я думаю, что обратные вызовы здесь не помогут.

Вот мой код:

function search() { 
     ... 
} 

ed.onKeyUp.add(function (ed, e) { 

    if (e.keyCode == 13) 
       enterPressed(); 

} 

function enterPressed() { 
     ... 
} 
+0

шоу нам ваш код –

+0

Обратные вызовы, вероятно, являются способом сделать это. – Blender

+0

@ Floradu88 Там. –

ответ

2

Callbacks путь вперед.

Либо:

  1. Bind вашего KeyUp обработчика событий в функции обратного вызова, который срабатывает, когда поиск заканчивается или
  2. Установить переменную (в области видимости для обеих функций) и измените его значение, когда поиск заканчивается , Прежде чем что-либо делать в обработчике ключей, проверьте значение и, если он не изменился, немедленно отправит return.

(Это предполагает, что призвание enterPressed из функции KeyUp имеет большое значение. Если в том числе кода KeyUp является отвлекающим маневром, который просто показывает, что вы хотите назвать его в другое время а затем просто используйте его как обратный вызов напрямую).

2

Вы должны использовать успешный/полный обратный вызов для вызова вашей функции по завершении. Что-то вроде:

$.ajax({ 
    ... 
    success: enterPressed, 
    ... 
:); 
+0

Мне нужно вызвать onKeyPressed там, а не enterpressed. как это сделать? –

0

После того как вы закончили свою первую функцию, вы передаете вторую функцию в качестве аргумента вашей первой функции и выполните ее в конце.

function search (callback) { 
    // your code here 
    callback(); 
} 

search(function() { 
    ed.onKeyUp.add(function (ed, e) { 
     if (e.keyCode == 13) { 
      enterPressed(); } 
    } 
}); 
0

Попробуйте это:

var searchDone = false; 

function search() { 
     ... 
    searchDone = true; 
} 

ed.onKeyUp.add(function (ed, e) { 

    if (e.keyCode == 13) 
       enterPressed(); 

} 

function enterPressed() { 
    if (!searchDone) { 
     setTimeout(enterPressed,100); 
     return; 
    } 

     ... 
} 

Вы бы, очевидно, проверить, что searchDone получает правда рано или поздно ... но у вас есть представление о том, что вы можете сделать сейчас :)

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