Доступ к дочернему iFrame с MasterPage (в том же домене)

#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: Я видел, что можно голосовать за ответы, но как я могу голосовать за комментарии?