события jQuery не работают в iframe?

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

Ниже приведен тег скрипта в 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 ответов


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

$("#Your-Iframe-Id").load(function (){
    // write your code here
});

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


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


мне кажется :

$('.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);
    });

ура.


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

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