2015-03-07 4 views
1

Я следующий код, который работает внутри документа готовый событие:

jQuery(document).ready(function($) { 

    $('tr[data-name="background_colour"] input.wp-color-picker').each(function() { 

     //this works 
     $(this).closest('tr').siblings('tr[data-type="wysiwyg"]').css('background-color', this.value); 

     //this doesn't because frames are not loaded 
     $(this).closest('tr').siblings('tr[data-type="wysiwyg"]').find('iframe').contents().find('body').css('background-color', this.value); 
    }); 
}); 

Фоновый цвет tr изменяется успешно, но не в body из iframe, потому что все фреймов динамически создаются, и они еще не загружены полностью, когда документ готов.

Так что я попытался с помощью window.load вместо следующим образом:

jQuery(window).load(function($) { 

    $('tr[data-name="background_colour"] input.wp-color-picker').each(function() { 

     //this works 
     $(this).closest('tr').siblings('tr[data-type="wysiwyg"]').css('background-color', this.value); 

     //this doesn't because frames are not loaded 
     $(this).closest('tr').siblings('tr[data-type="wysiwyg"]').find('iframe').contents().find('body').css('background-color', this.value); 
    }); 
}); 

Но я Uncaught TypeError: object is not a function на линии ниже, когда я сделал это:

$('tr[data-name="background_colour"] input.wp-color-picker').each(function() {

Получил эту работу благодаря Ответ Гуффа. Вот правильный код, который может быть полезным для других людей:

jQuery(window).load(function() { 

    jQuery(function($){ 

     $('tr[data-name="background_colour"] input.wp-color-picker').each(function() { 
      $(this).closest('tr').siblings('tr[data-type="wysiwyg"]').css('background-color', this.value); 

      $(this).closest('tr').siblings('tr[data-type="wysiwyg"]').find('iframe').contents().find('body').css('background-color', this.value); 
     }); 
    }); 
}); 
+0

вы можете показать нам свой HTML код или родительскую таблицу атрибута, который вы используете – ShapCyber

+0

Какой код генерирует iframes? Я предлагаю переместить этот код в это место. – tcooc

+0

код создается из плагина wordpress. html-код в очень упрощенной версии - это что-то вроде https://jsfiddle.net/LcssrmL8/ – renny

ответ

3

Обработчик ready события вызываются с объектом JQuery в качестве параметра, но обработчик load события не является.

Как у вас есть $ как параметр для обработчика события load, он будет содержать объект события, а не объект jQuery. Когда вы пытаетесь использовать объект события, как если бы это был объект jQuery, вы получите сообщение об ошибке.

Удалить параметр из обработчика load событий, так что вы можете получить доступ к переменной $ из глобальной области видимости:

jQuery(window).load(function() { 
+0

Upvote +1 для четкого объяснения –

Смежные вопросы