JQuery захватить встроенный клик и добавить обратный вызов - PullRequest
0 голосов
/ 21 июня 2011

Я никогда раньше не видел, чтобы кто-нибудь делал это, поэтому я решил добавить это.

У меня есть устаревшая страница с встроенным событием onclick в каждом списке переключателей:

onclick="handleService(document.forms.ContactForm,5,16,5,0,0);" 

Этот код вызывает AJAX, чтобы получить дополнительный HTML, который затем добавляет дополнительные элементы формы в зависимости от того, какая радио-кнопка нажата.Эта функция handleService включена из удаленного файла Javascript, который я не могу ни редактировать, ни копировать локально, поскольку он генерируется динамически и может изменяться.

Мне интересно, возможно ли это с помощью jQuery (или иным образом) длязахватить это событие onclick и затем каким-то образом добавить к нему функцию обратного вызова.

Я пытаюсь получить два столбца таблицы одинаковой высоты при каждом нажатии переключателя.Добавление дополнительных элементов формы приводит к увеличению или уменьшению размера одного из столбцов.Я попытался просто добавить свою функцию, чтобы зафиксировать высоту непосредственно после вызова handleService в onclick, но высота фиксируется до того, как добавляются дополнительные элементы формы, возможно потому, что вызов AJAX не завершился до того, как мой вызов зафиксировал высоту(отсюда необходимость обратного вызова).

ОБНОВЛЕНИЕ Вот мой вызов ajaxComplete (также глобальной функции, такой как ajaxSucess):

$('.gq_steps').ajaxComplete(function(e, xhr, settings) {
    alert('here');
    if (settings.url == 'geoquote_services.php') {
        $('#first_col').height($('#third_col').height());
    }
});

handleService не использует jQuery, но это не должноне имеет значения, верно?ajaxSucess / ajaxComplete должен захватывать все ajax-запросы независимо.Я даже пытался перебрать его до следующего кода, и он все еще не вызывается.

$(document).ajaxComplete(function() {
    console.log('here'); 
});

У меня это сидит внутри $ (документа) .ready(...) вызов.Разве это не должно быть?

1 Ответ

0 голосов
/ 21 июня 2011

Похоже, вас может заинтересовать обработчик событий jQuery ajaxSuccess() .

Поскольку вы хотите, чтобы ваш код запускался после , когда запрос завершен, и вы неКажется, у вас нет доступа к этому другому файлу, чтобы добавить туда обратный вызов, вы можете использовать сложный подход: привязать слушателя к ajaxSuccess, а затем запустить исправление высоты.

Примерно так: $('.your-columns'). ajaxSuccess (function (e, xhr, settings) {// Проверить, является ли это нашей функцией //, затем исправить высоты.});

Обратите внимание, что ajaxSuccessбудет запускаться на каждый Ajax-вызов, независимо от того, что произошло, это довольно трудоемкий процесс, и вам обязательно нужно будет проверить, чтобы убедиться, что вы работаете с правильным ответом и нуждаетесь в использовании своего кода.Поскольку HTML возвращается, вы всегда можете проверить наличие определенных элементов в $(xhr.responseText) или чего-то подобного.

...