Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.10.2018, 15:22
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Ошибка Uncaught TypeError, почему появилась?
Добрый день. Есть функция для печати:
function printSticker(elem){    
    var mywindow = window.open('', 'PRINT', 'height=400,width=600,left=300,top=300');
    mywindow.document.write(document.getElementById(elem).innerHTML);
    mywindow.document.close();
    mywindow.focus();
    mywindow.print();
    mywindow.close();
    return true;
}

Я передавал в нее id блока который нужно было печатать, все работало.

Теперь же мне нужно было отправлять GET запрос на сервер, получать ответ, и вставлять ответ в блок печати. Делаю так:
function getPrintPlan(){
    $.getJSON('index.php', function(data) {
        printPlan(data[1]);
    });
}

function printPlan(data){
   //делаю свои дела, могу тут ничего не делать, ошибка остается
   printSticker('elem');
    
}

function printSticker(elem){    
    var mywindow = window.open('', 'PRINT', 'height=400,width=600,left=300,top=300');
    mywindow.document.write(document.getElementById(elem).innerHTML);
    mywindow.document.close();
    mywindow.focus();
    mywindow.print();
    mywindow.close();
    return true;
}


Выходит ошибка :
Код:
Uncaught TypeError: Cannot read property 'document' of null
И жалуется на эту строку :
Код:
mywindow.document.write(document.getElementById(elem).innerHTML);
В чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 12.10.2018, 15:50
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

а если добавить window перед document?
mywindow.document.write(window.document.getElementById(elem).innerHTML);
Ответить с цитированием
  #3 (permalink)  
Старый 12.10.2018, 20:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Проблема в том, что это твоё mywindow не открылось. А не открылось оно потому, что браузер не блокирует только те окна, что открываются сразу в ответ на действия пользователя.
У тебя же загрузка index.php занимает некоторое время, а потому создание нового окна блокируется как нежелательное.
Сначала открывай окно, а уж потом шли запросы и пиши в него.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2018, 10:03
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Aetae,
Спасибо, сделал так, работает:
function getPrintPlan(){
    $.ajaxSetup({
        async: false
    });
    $.getJSON('index.php', function(data) {
        printPlan(data[1]);
    });
}
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2018, 21:19
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Artur_Hopf, синхронный ajax - моветон. Но воля ваша.)
__________________
29375, 35
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Uncaught TypeError: document.jshop_filters.submit is not a function jrmobile Общие вопросы Javascript 3 03.05.2018 11:13
Ошибка Uncaught TypeError: Smart.dataTable is not a function xgshx813 AJAX и COMET 0 06.03.2018 13:40
Ошибка Uncaught Unknown name at position 3 в datepicker.min.js ramil Элементы интерфейса 0 24.10.2016 11:01
Ошибка: Uncaught TypeError lokifc Общие вопросы Javascript 2 28.09.2014 23:58
Ошибка: Uncaught TypeError: Cannot set property 'innerHTML' of null dolte Events/DOM/Window 4 16.09.2013 10:54