В jQuery, как я могу отслеживать динамически заполненный элемент (AJAX), не основывая его на событии? - PullRequest
3 голосов
/ 13 сентября 2010

У меня есть следующая разметка при загрузке страницы:

<select name="sel_billing_address"></select>

После загрузки страницы этот выбор заполняется каким-то AJAX, чтобы он был чем-то вроде:

<select name="sel_billing_address">
  <option value="1">hi</option>
  <option value="2">there</option>
  <option value="3" selected="selected">sally</option>
</select>

Мне нужно выбрать выбранную опцию из этого списка. Обычно это простой случай:

jQuery('select[name=sel_billing_address] option:selected');

но поскольку он загружается динамически, мне нужно отслеживать его с помощью .live () - или другими способами. Если я наблюдаю за ним, используя live ('change'), то он отлично работает - но мне нужны значения, когда поле выбора могло быть не изменено.

.live ('load') кажется очевидным выбором, но это работает только при загрузке элемента - сам элемент select загружается при загрузке страницы, после чего он становится пустым. Я также попытался сделать .live ('load') на OPTION, а не на SELECT, но, похоже, он также недоступен.

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

Любая помощь очень ценится.

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

проверьте плагин livequery . Он имеет возможность работать так же, как метод .live (), но в отличие от live, он не ограничивается просто привязкой к событиям

1 голос
/ 16 сентября 2010

Вы можете посмотреть на (Global) Ajax Events . Это может дать вам возможность проникнуть в обратный вызов ajax, к которому у вас нет прямого доступа.

// Use the Global Ajax Event "ajaxComplete"
$('select[name=sel_billing_address]').bind('ajaxComplete', function () {
    // Check to see if select has any option elements yet
    if ($(this).find('option').length > 0) {
        // Unbind the ajax event
        $(this).unbind('ajaxComplete');

        // Do your stuff
        // Here...
    }
});

Если вы откроете страницу jquery, на которую я ссылаюсь, вы увидите, что «ajaxComplete» появляется после любого «завершения».

РЕДАКТИРОВАТЬ: Да ... это все еще использует событие, но я думаю, что это решит вашу проблему.

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