Селектор jquery не будет работать на элементах управления, загруженных с asp: UpdatePanel - PullRequest
2 голосов
/ 09 мая 2011

У меня есть устаревший код, который использует панель обновления asp.net для загрузки некоторых элементов нумерации страниц.в основном это будет иметь несколько текстовых полей и немного текста.Мне нужно проверить, установлен ли какой-либо флажок при нажатии кнопки.Код jquery, который у меня есть, работает для начальной загрузки, но когда происходит загрузка ajax, загруженные элементы больше не находятся в начальной DOM, поэтому не будут рассматриваться для каких-либо действий jquery.мы можем использовать live или deligate для событий, но если мне нужно использовать элемент управления в качестве селектора, который не поможет.

Код для проверки, установлен ли флажок, прост, но меня беспокоит, какперепривязать его после вызова ajax?

if ($('input:checked').length > 0) {
       alert('checked');
   }
   else {
          alert("not selected");
   }

Есть идеи ??

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Если вы измените исходное значение bind (или click или что-то еще, click - это просто оболочка для bind) на live или (лучше) delegate, они переживут обновления базовых элементов DOM.

К сожалению, на сайте api.jquery.com сегодня возникают проблемы, поэтому эти ссылки не будут чрезмерно полезными прямо сейчас.В основном, однако, если у вас есть:

$("some_selector").click(function() { ... });

Вы можете изменить его на

$("some_selector").live("click", function() { ... });

или (лучше)

$("some_parent_element_selector").delegate("selector_for_descendants", "click", function() { ... });

Что происходит с этим jQueryотслеживает событие в родительском элементе (или "теле" в случае live), а затем проверяет, соответствует ли исходный элемент выбранному вами селектору.Если это так, он вызывает ваш обработчик, как если бы он был подключен к фактическому элементу.Поскольку обработчик находится на элементе-предке, а не на фактическом элементе-потомке, вы можете поменять его по своему желанию.Иногда это называется «делегированием события» (отсюда и функция delegate).

Пример:

HTML:

<div id='container'>
  This is the container.
  <div class='foo'>
    This is the descendant of the container. Click me.
  </div>
</div>

JavaScript:

$("#container").delegate(".foo", "click", function() {
  $("<p>Element with class 'foo' clicked!</p>").appendTo(document.body);
});

Живая копия

0 голосов
/ 12 мая 2011

На кодплексе есть решение: http://updatepanelplugin.codeplex.com/discussions/70810

0 голосов
/ 09 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...