#javascript #jquery #sharepoint
#javascript #jquery #sharepoint
Вопрос:
У меня есть страница веб-части SharePoint со списком, который сгруппирован и по умолчанию имеет значение «свернутый» (очень похоже на базовое переключение). SharePoint генерирует свой собственный JavaScript для обработки начального действия щелчка, который затем расширяет область страницы и динамически записывает новое содержимое в эту область. Проблема в том, что jQuery не может получить доступ к новому содержимому сразу после щелчка (ему необходимо завершить загрузку). Я думаю добавить 2-ю функцию щелчка jQuery в ссылку переключения и каким-то образом дождаться добавления нового содержимого, прежде чем произойдет что-либо еще, но я не уверен, как определить, когда динамический контент завершит загрузку…
//bind a 2nd additional onclick handler via jquery to these items
$('td.ms-gb').children('a').click(function()
{
//give the clicked item a border for visual identification
$(this).css("border","1px solid cyan");
//delay this function until the sharepoint onclick handler finishes loading new content
$('TD.ms-vb-icon').children('a').each(function(index)
{
//give each item a border for visual identification
$(this).css("border","1px solid red");
//perform more jquery on each item
}
);
}
);
Ответ №1:
Распространенный метод решения подобных проблем заключается в использовании
setTimeout(функция, timeoutInMs)
и попытайтесь найти новое содержимое в функции, если не удается перезапустить тайм-аут, пока не найдете содержимое
Вот jsFiddle для иллюстрации: http://jsfiddle.net/Dhww2 /
Комментарии:
1. да, я думал об этом, но я не очень хорошо разбираюсь в JavaScript.
2. итак, возможно ли это … setTimeout(функция jQuery, timeoutInMs)?
Ответ №2:
Единственное, что я могу придумать, это установить другой обработчик кликов, который регистрируется с помощью $.ajaxSuccess()
http://api.jquery.com/ajaxSuccess / и отвечает после завершения первого AJAX-запроса (после щелчка)
Это халтурно, но если код, который извлекает динамическое содержимое, не имеет обратного вызова, вариантов не так много.
Комментарии:
1. Интересно, работает ли $.ajaxSuccess() для AJAX, не вызываемого функциями jQuery.
2. @gertas: Я не думаю, что это так, но код SharePoint написан на jQuery
3. AFAIK SharePoint не поставляет jQuery, я думаю, вы имели в виду «JScript». источник 2010
4. это MOSS2007, поэтому код переключения SharePoint НЕ использует jQuery.
Ответ №3:
Что вы собираетесь делать с загруженным контентом? Просто стилизовать и поймать еще один клик?
В таком случае используйте таблицы стилей для пользовательского стиля и живую функцию jQuery для отслеживания (щелчка) событий других загруженных элементов.
Обновление для комментариев
$('TD.ms-vb-icon a').live('click', function(ev) {
$(this).attr('name','value');
}
Может не сработать, если ваш код отслеживания кликов зарегистрирован ранее. Если это так, попробуйте с mouseover
помощью event.
Комментарии:
1. с загруженным содержимым мне нужно только добавить атрибут name к тегам привязки.
2. Хорошо, значит, вы в конечном итоге хотите перейти к этим именованным якорям?
3. нет, просто нужно запустить некоторый jquery, чтобы добавить атрибут name к каждому из тегов привязки каждого из возвращаемых элементов.
4. думайте об этом как о базовом переключателе… вы нажимаете, чтобы развернуть, и новое содержимое загружается в пространство ниже. мне нужно только добавить атрибут name к тегу привязки каждого загружаемого элемента. но я не могу понять, как написать jquery для поиска загруженных элементов.
5. Верно, но я пытаюсь понять, какова цель этих атрибутов «name». Если загруженный контент может получить еще один щелчок, вы можете перехватить его
live
и заполнить недостающие «имена» в обработчике событий. Можно использовать даже ‘mouseenter’ или ‘focus’.