События jQuery не работают в iframe? - PullRequest
11 голосов
/ 23 ноября 2011

У меня проблемы с focus(function(){}) и blur(function(){}) в скрипте, который вложен в динамически загружаемый iframe ..

Ниже приведен тег сценария В РАМКАХ динамически загружаемого фрейма. Любое событие, которое я добавляю в разметку скрипта, не работает, простые вещи, такие как $('input').click(function(){alert('fired')});, даже не запускаются. Я не уверен, что происходит.

Да, jQuery загружается в iframe в голове.

<script type="text/javascript">
// <![CDATA[
    $(document).ready(function() {

        $('.form .field-content').find('input, select, textarea').focus(function() {
            $(this).closest('.field').addClass('focused');
        });

        $('.form .field-content').find('input, select, textarea').blur(function() {
            $(this).closest('.field').removeClass('focused');
        });

        $('.form .field-content').find('input, select').keypress(function(e) {
            if (e.which == 13) {
                e.preventDefault();
                $(this).closest('.form').find('.button').first().click();
            }
        });

        $('.form .button').focus(function() {
            $(this).addClass('focused');
        });

        $('.form .button').blur(function() {
            $(this).removeClass('focused');
        });

        // focus on first field
        $('.form .field-content').find('input, select, textarea').first().focus();

    });
// ]]>
</script>

Ответы [ 5 ]

4 голосов
/ 30 ноября 2011

Возможно, проблема в том, что содержимое iframe не было загружено, попробуйте

$("#Your-Iframe-Id").load(function (){
    // write your code here
});
0 голосов
/ 30 ноября 2011

Возможно, это связано с безопасностью вашего браузера. Поиграйте с некоторыми настройками зоны и посмотрите, поможет ли это.

Какой браузер вы используете?

0 голосов
/ 23 ноября 2011

Загружает ли iframe URL-адрес, отличный от родительского контейнера?Если это так, вы не сможете использовать JavaScript для манипулирования его содержимым.

0 голосов
/ 30 ноября 2011

Я думаю:

$('.form .field-content').find('input, select, textarea').focus(function() {
        $(this).closest('.field').addClass('focused');
    });

должно быть:

$('.form .field-content').find('input, select, textarea').each(function(index) {
        $(this).focus(function(){
           alert('element ' + index + ' focused');
         });
         alert('bind focus event in element ' + index);
    });

ура.

0 голосов
/ 23 ноября 2011

для контента, который динамически загружается, вы должны взглянуть на jQuery live () function

...