2013-10-14 2 views
6

У меня есть огромный яваскрипта кода и блокировки разблокировки пользовательского интерфейса через ваши blockUI.js (http://malsup.com/jquery/block/)blockUI исключение «ParentNode» неопределенной

я получаю «Не удается прочитать свойство«ParentNode»неопределенных" исключение в случайном порядке.

Кажется, что последовательность блокирования/разблокирования в моем коде вышла из sync.ex. из-за множественного шаблона html он может блокироваться дважды и разблокировать один раз или наоборот. Мне сложно проанализировать весь код и исправить порядок.

Мне удалось создать скрипку проблемы. Может кто-нибудь, пожалуйста, взгляните и объявите тиски быстро исправить?

http://jsfiddle.net/pareshvarde/D8KW4/

<script type="text/javascript"> 
    $(function() { 
     $("#blockButton").click(function() { 
      myBlock($('#blockSection')); 
     }); 

     window.setInterval(function() { 
      myBlock(); 
      myBlock($('#blockSection')); 
      window.setTimeout(function() { 
       myUnblock(); 
       myUnblock($('#blockSection')); 
      }, 5000) 
     }, 2000); 

     $("#unBlockButton").click(function() { 
      myUnblock($('#blockSection')); 
     }); 
    }); 

    myBlock = function (surroundingControl, message) { 
     console.log('blocking'); 

     if (message) 
      $("#loader h4").text(message); 
     else 
      $("#loader h4").text('Loading...'); 

     if (surroundingControl) 
      surroundingControl.block({ message: $('#loader'), baseZ: 1200 }); 
     else { 
      $.blockUI.defaults.message = $('#loader'); 
      $.blockUI.defaults.baseZ = 1200; 
      $.blockUI.apply(); 
     } 
    }; 

    myUnblock = function (surroundingControl) { 
     console.log('unblocking'); 

     if (surroundingControl) 
      surroundingControl.unblock(); 
     else 
      $.unblockUI.apply(); 
    }; 
</script> 

ответ

2

ОК, наконец, я установил вопрос. В основном я создал динамический элемент и поместил содержимое моего загрузчика в этот div и использовал его для блокировки.

моя upldated функция myBlock следующим образом:

myBlock = function (surroundingControl, message) {    
     console.log('blocking'); 

     if (message) 
      $("#loader h4").text(message); 
     else 
      $("#loader h4").text('Loading...'); 

     var messageContent = document.createElement('div'); 
     if ($('#loader') !== undefined) 
      $(messageContent).html($('#loader').html()); 
     else 
      $(messageContent).html("Loading...."); 

     if (surroundingControl) 
      surroundingControl.block({ message: messageContent, baseZ: 1200 }); 
     else { 
      $.blockUI.defaults.message = messageContent; 
      $.blockUI.defaults.baseZ = 1200; 
      $.blockUI.apply(); 
     } 
    }; 
1

Обычно эта проблема возникает, поскольку он не может найти элемент DOM, который, указанный в свойстве «сообщение» или свойства сообщения не было указано на всех, в вашем случае необходимо убедиться, что $('#loader') возвращает элемент.

Подсказка: вы могли бы даже пройти message: null на случай, если вам просто нужно заблокировать, не показывая никакого содержимого или загружающего изображения.

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