2013-06-06 3 views
1

Не знаете, как это назвать, но проблема в том, что ... У меня есть несколько строк jQuery, которые работают нормально, они активируются сначала, когда страница загружается, а затем щелчком мыши внутри div.javascript не работает jquery

Я сейчас пытаюсь иметь один и тот же код работает на временных интервалах, но он не работает вообще ни выдает какую-либо ошибку ....

Любая идея? сайт построен на WordPress и сценарий работает над картиной «слайд-шоу» вы можете проверить на http://demo.lavenderwp.com/nowland/

код, который я использовал для интервалов времени:

setInterval("myFunc()",100); 

function myFunc() 
{ 
$('#slider, .leftNav, .rightNav, .bottomNav').click(function() 
     { 
      $(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex <= 100; 
       }).find('img').wrap('<div class="blue" />') .css({opacity: 0.75, border: "0px white solid"}); 

      $(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex <= 100; 
       }).find('div.car').css({display: "none"}); 

      $(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex >= 100; 
       }).find('img').css("background-color","") .css({opacity: 1, border: "15px white solid"}); 

      $(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex >= 100; 
       }).find('div.car').css({display: "block"}); 
     }); 
} 
+0

Вы, возможно, потребуется отложить запуск этого кода, пока DOM не закончит загрузку, если вы не называют это из какого-либо события на странице. – PinnyM

ответ

2

Поместите свой setInterval (и любой jQuery) в пределах $(function(){ });, поэтому он запускается только при загрузке документа. И как указывает @tymeJV, вы должны передать функцию без скобок.

Также вы понимаете, что интервал времени равен миллисекундам? Ваш myFunc работает 10 раз в секунду. Вам также не нужно повторно связывать событие click. Просто сделайте это один раз, и все будет в порядке.

+0

вы также можете использовать $ (document) .ready (...) для инициализации интервала. – WhyMe

+0

@WhyMe, это то же самое. http://api.jquery.com/ready/ – Prisoner

+0

'$ (function() {}); поэтому он запускается только при загрузке jQuery' - вы имеете в виду «поэтому он запускается только при загрузке DOM», правильно? – Ian

0

Удалите кавычки вокруг вашей функции, а также ():

setInterval(myFunc , 100); 

Кроме того, не забудьте включить эту функцию после того, как DOM готова.

1

Ответ: не делайте этого!

Почему вы неоднократно присоединяете слушателей событий к событию десять раз в секунду?!? Это быстро исчерпает память, если jQuery достаточно умен, чтобы прикрепить их только один раз.

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

Или если проблема в том, что прослушиватели событий не подключаются при первой загрузке страницы, то, как и другие, используйте $(document).ready(myFunc); или $(myFunc);.

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

Подробнее о коде кода myInit, код в этой функции имеет немного повторения, которое было бы лучше всего удалено, а также есть ошибка «один за другим». Что произойдет, если один из ваших элементов имеет z-index ровно 100? Он проходит все.filter() тестов. А также отступы немного запутывают.

Вот пример того, как можно очистить этот код:

function myFunc() { 
    $('#slider, .leftNav, .rightNav, .bottomNav').click(function() { 

     var $all = $(".contentHolderUnit"); 
     var $lower = $all.filter(function(i, el) { 
      return el.style.zIndex <= 100; // or should it be < 100 ? 
     }); 
     var $upper = $all.not($lower); 

     $lower.find('img').wrap('<div class="blue" />').css({ 
      opacity: 0.75, 
      border: "0px white solid" 
     }); 

     $lower.find('div.car').css({ 
      display: "none" 
     }); 

     $upper.find('img').css({ 
      backgroundColor: "", 
      opacity: 1, 
      border: "15px white solid" 
     }); 

     $upper.find('div.car').css({ 
      display: "block" 
     }); 
    }); 
} 
0

Удивительные ребята! Получил это, спасибо большое!

Окончательный код:

jQuery(function(){ 
setInterval(myFunc,100); 
}); 

function myFunc() 
{ 
jQuery(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex <= 100; 
       }).find('img').wrap('<div class="blue" />') .css({opacity: 0.75, border: "0px white solid"}); 

      jQuery(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex <= 100; 
       }).find('div.car').css({display: "none"}); 

      jQuery(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex >= 100; 
       }).find('img').css("background-color","") .css({opacity: 1, border: "15px white solid"}); 

      jQuery(".contentHolderUnit").filter(function(i, el) 
      { 
        return el.style.zIndex >= 100; 
       }).find('div.car').css({display: "block"}); 
     }