#jquery #asp.net #iframe
#jquery #asp.net #iframe
Вопрос:
в моем ASP.NET приложение Я использую MasterPage и iFrame для части содержимого приложения (в iFrame также есть боковая панель и строка меню).
Моя цель — вставить функцию jQuery / javascript, чтобы перехватить, какой <select>
элемент получает фокус в дочернем iFrame.
И MasterPage, и iFrame являются частью одного и того же приложения, и iFrame открывает не внешние страницы, а .aspx-страницы приложения, следовательно, тот же домен.
Но в любом случае событие «focus», похоже, не работает, поскольку внутренний код не выполняется.
Вот функция:
$("#tabFrame").load(function() {
$("#tabFrame").contents().find("SELECT").focus(function() {
alert('focus on');
}).change(function() {
$.ajax({
type: "POST",
url: "../WebService/registerChanges",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
controlName: dropDownId
}),
success: function(data) {
var result = JSON.parse(data.d);
if (result.Success) {
alert("Successfully found.");
}
}
})
})
})
Поскольку сама функция верна, я предполагаю, что при попытке получить доступ к внутреннему IFrame извне возникают некоторые проблемы, но я не могу понять, какие именно.
Есть предложения? (Я использую IE8 в качестве браузера)
Спасибо.
Комментарии:
1. Вы подтвердили, что $ («#tabFrame»).load(…) запускается?
2. поскольку вы находитесь внутри $ («#tabFrame»).load (..), возможно, $ («#tabFrame») ничему не соответствует — попробуйте изменить $ («#tabFrame»).contents().find («выбрать») на $ («выбрать»)
3. Чтобы проверить, запущен ли iframe, я помещаю сразу после функции $ («#tabFrame»).load() простое предупреждение. Вначале я использовал просто $ («select»), но даже тогда это не работало
4. Попробуйте запустить это, чтобы узнать, соответствует ли внутреннее выделение каким-либо элементам dom: $ («#tabFrame»).load(функция() { alert($ («#tabFrame»).contents().find(«SELECT»).length); });
Ответ №1:
Теперь это работает:
-
Изначально проблемы были из-за IFrame, поскольку я пытался получить к нему доступ до того, как он был загружен. С помощью функции $(«#tabFrame»).load() к нему был получен доступ в нужное время.
-
После этого причиной проблемы была отсутствующая ссылка на jQuery (JSON) : ( Но, сделав шаг назад и поместив просто alert вместо вызова веб-сервиса, я смог с этим справиться.
Приведенный выше код является рабочей версией.
Комментарии:
1. @Natan: спасибо за ваши подсказки, они подтолкнули меня в правильном направлении.
2. С удовольствием — не забудьте проголосовать за комментарии, если они были полезны 🙂
3. @Natan: Я видел, что можно голосовать за ответы, но как я могу голосовать за комментарии?