2015-11-04 3 views
0

Мой код работает на localhost, но когда я реализую его на своем сайте, он не делает. В журнале ошибок говорится, что он вызывает элемент, который не существует. Я пришел к выводу, что элемент не может видеть элемент, потому что элемент загружается динамически.jquery call null element, который на самом деле существует

Элемент - это класс .newsitem_text, это div, который содержит сообщение в блоге. Я считаю, что jquery вызывает класс перед тем, как класс загружается страницей.

Вот один пример скрипку: http://jsfiddle.net/ku6L240c

Ошибка: Uncaught TypeError: Cannot read property 'html' of null 47-ganhe-dinheiro-atraves-de-downloads:1093 Uncaught SyntaxError: Unexpected token ILLEGAL

Код:

<javascript> 
      var wordList = $(".newsitem_text").html().split(' '); 
      var newHtml = ''; 

      $.each(wordList, function(index, word){ 
       newHtml += ' ' + word; 
       if (index == 50) { 
       newHtml += '<div>Some HTML</div>'  
       }   
      }) 
      ; 

      $(".newsitem_text").html(newHtml); 


</javascript> 

Как я могу сделать ждать сценарий, пока класс не загружается страница , то он казнен или что-то еще?

+0

Для получения дополнительной информации необходимо получить дополнительную информацию. Неясно, что такое ошибка или с чем этот код взаимодействует. – Twisty

+0

_Как я могу заставить сценарий ждать, пока класс загружается страницей_ - Переместите свой скрипт в нижней части блока тела или заверните свой скрипт в '$ (document) .ready (function() {// ваш код}) ' – Jasen

+0

Вы используете тег' 'на своей реальной странице? – fuyushimoya

ответ

1

Кажется, вы делаете динамический HTML внутри JS-кода и сразу пытаетесь получить только что добавленные теги. Если это так, вашему коду придется подождать и продолжать проверять, пока браузер не отобразит ваш новый HTML и не добавит узлы в DOM, тогда вы можете запросить их или что-то сделать.

Единственный способ, которым я нашел работу, - это установить setTimeOut и продолжить проверку, а затем выполнить ваше последнее утверждение. Я создаю функцию ниже, которая проверяет ожидание и проверяет наличие определенного условия, а затем выполняет функцию обратного вызова.

//A function to wait until either times up, or until a pass in "funct" returns "true", which ever occured first. 
//funct - callback function, to be returned true or false. 
//done - an optional callback function for notify when waiting is over. 
//timeout - the amount of time in million-second to wait. 
//caller - optional string of caller for monitoring if multiple waiting session. 
function waitToSync(funct, done, timeout, caller) { 
    //This is a hack synchronize to wait until funct() returns true or timeout becomes < 0. 
    caller = caller || ''; 
    if ((funct === undefined) || typeof (funct) != 'function') return; 
    function waiting() { 
    if (!funct()) { 
     var dt = new Date(); 
     console.log(caller + " waiting: " + dt.format('yyyy-mm-dd h:MM:ss')); 
     if ((timeout - 1000) > 0) 
     setTimeout(waiting, 1000); //1 second. 
     else { 

     console.log(caller + ': waitToSync timed out!!!'); 
     document.body.style.cursor = 'default'; 
     } 
     timeout -= 1000; 
    } 
    else { 
     if (done !== undefined && (typeof done === 'function')) 
     done(); 
    } 
    } 
    waiting(); 
} 

Сделайте все, что вам нужно, или что-нибудь еще, чтобы ждать. Затем вызовите WaitToSync

$.each(wordList, function(index, word){ 
    newHtml += ' ' + word; 
    if (index == 50) { 
     newHtml += '<div>Some HTML</div>'  
    }   
    }); 

    waitToSync(
    function wait() { return document.getElementsByClassName("newsitem_text").length > 0; }, 
    function dosomething() { $(".newsitem_text").html(newHtml); }, 
    10000, //wait up to 10 seconds. 
    'dynamic add HTML'); 
+0

Не будет ли это зависеть от загрузки страницы? Как скорость коннекта? –

+0

Нет. Это просто вспомогательная функция setTimeout.Эта функция может использоваться при динамической загрузке всей страницы. Функция решала большую проблему при работе с синхронизацией характера асинхронизации в javascript. Он не блокирует выполнение. – Leng

+0

Время ожидания «тайм-аута» может быть установлено на 100 000 в течение 10 минут. Он будет ждать 10 минут, если не будет выполнено условие. Он завершает функцию ожидания после выполнения условия. Функция funct() имеет true. – Leng

1

Вы можете попытаться выполнить эту функцию в окне нагрузки или документ, готовый

просто положить ур функцию внутри этого:

$(window).load(function(){ 
    //your function here 
}); 

или здесь

$(document).ready(function(){ 
    //your function here 
}); 
+0

' Uncaught TypeError: $ (...). Ready не является функцией 47-ganhe-dinheiro-atraves-de-downloads: 1093 Uncaught SyntaxError: Неожиданный токен ILLEGAL' –

+0

Вам нужно вставить ur jquery.min.js до ur script –

0

Это способ лучше поместить код в конец тега body после всего вашего контента, чтобы javascript мог запускаться после того, как все загружено!

+0

Вот что я делаю ............... –

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