Проблемы с jQuery .find (селектором) при выборе элемента ajax.net - PullRequest
1 голос
/ 01 марта 2011

Я пытаюсь найти элемент расширения ajax.net с динамически генерируемым идентификатором.Я пытаюсь подключить обработчик событий, чтобы закрыть все модальные всплывающие окна ajax.net при нажатии клавиши escape.Я запутался, почему одно из этих работает, а другое нет.

$find('ctl00_MainContent_ucUserControl1_mpePopup'); //returns the element
$find('[id="ctl00_MainContent_ucUserControl1_mpePopup"]'); //returns null

Конечная цель - найти элемент без жесткого подключения идентификатора в селекторе:

$find('[id$="_mpePopup"]');  //return all elements that end with "_mpePopup"

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Теперь я вижу, что есть разница между $ find и .find ().Я не осознавал этого, но как только было упомянуто, что $ find () был ярлыком MS Ajax, я посмотрел глубже и нашел решение, которое объединяет jQuery с MS Ajax.

var popups = $.grep(Sys.Application.getComponents(),
                function (elem, index) {
                    return $(elem).attr('_name') == 'ModalPopupBehavior';
                }
            );
$(popups).each(function () { this.hide(); });

Проблема в $find (id) просто возвращает элемент в Sys.Application._components [id].'id' в данном случае является индексом, поэтому вы не можете использовать частичную строку или шаблон.

После того, как вы конвертируете эту коллекцию в массив, вы можете использовать jQuery.grep () для ее возвратамассив элементов, которые удовлетворяют некоторому условию (в этом случае я заметил, что '_name' было даже проще использовать, чем селектор атрибута) и перебираем их с помощью jQuery.each ().

0 голосов
/ 01 марта 2011

Полагаю, вы обнаружите, что для операции $find требуется один идентификатор.Если я не ошибаюсь, в нем нет возможности сопоставления с образцом.(Для получения дополнительной информации о $find и $get см. http://mattberseth.com/blog/2007/08/the_everuseful_get_and_find_as.html)

. Возможно, вы захотите заполнить переменную JavaScript известным идентификатором всплывающего клиента, используя когда-либо полезный синтаксис привязки букв <%= mpePopup.ClientID %> pageнекоторый другой метод, удобный для вашей ситуации. Ниже приведен простой пример разметки ASPX, где mpePopup является членом класса страницы:

<script type="text/javascript">
    function closePopup() {
        var mpePopupID = '<%= mpePopup.ClientID %>';
        var mpePopupBehavior = $find(mpePopupID);
        // ...
    }
</script>
...