ASP.NET AJAX постбэк и jQuery - PullRequest
       5

ASP.NET AJAX постбэк и jQuery

1 голос
/ 02 февраля 2010

У меня есть Textbox, LinkButton и RadioButtonList внутри UpdatePanel. Когда кнопка нажата, панель UpdatePanel отображает совпадающие элементы в списке переключателей.

Это прекрасно работает, но теперь мне нужно, чтобы это происходило OnKeyDown в TextBox. Я пытаюсь отменить все выполняющиеся запросы AJAX, но мне не везет. Во-первых, при каждом нажатии клавиши UpdatePanel отправляет сообщения обратно, поэтому за один раз можно изменить только одну букву. Во-вторых, текстовое поле теряет фокус на обратную передачу.

Мне нужно показать список как обычно, но OnKeyDown так же, как и при нажатии кнопки. Это то, что у меня есть (сокращены контрольные идентификаторы)

$('#textBoxId').live('keydown', function(e) { 
  if((e.keyCode >= 47 && e.keyCode <= 90) || e.keyCode == 13) {
    Sys.WebForms.PageRequestManager.getInstance().abortPostBack();
    $('#buttonId').click();
    $('#textBoxId').focus();
  }
});

Спасибо за понимание.

Ответы [ 3 ]

0 голосов
/ 23 марта 2010

Первым шагом, вероятно, будет перемещение TextBox за пределы UpdatePanel (и использование RegisterAsyncPostbackControl ), что должно решить проблему фокуса.

Чтобы решить проблему обратной передачи при каждом нажатии клавиши, в прошлом я запускал таймер, чтобы проверять контроль изменений каждые X миллисекунд, а не на каждое изменение. Ход процесса будет выглядеть примерно так:

  1. Событие onchange TextBox вызвано
  2. UpdatePanel обновляется
  3. Событие onchange TextBox очищается, таймер настроен на проверку изменения значения в X миллисекундах
  4. Если значение снова изменилось, UpdatePanel обновляется, таймер сбрасывается для повторной проверки за X миллисекунд
  5. Если значение не изменилось, событие onchange TextBox сбрасывается, чтобы вернуться к шагу # 1

Таким образом, вы можете лучше контролировать частоту обновления панели.

0 голосов
/ 23 марта 2010

Хотите знать, почему вы не используете PageMethods?Это очень простой способ, который также сокращает время загрузки / обработки и легко интегрируется с логикой jquery.

$ ('# textBoxId'). Live ('keydown', function (e) {if ((e.keyCode> = 47 && e.keyCode <= 90) || e.keyCode == 13) {PageMethods.MyLogic (OnMLCallComplete);}});</p>

функция OnMLCallComplete (myLogicData) {делай что хочешь}

0 голосов
/ 02 февраля 2010
...