Функция Javascript не определена - PullRequest
0 голосов
/ 03 января 2012

Ошибка:

switchDiv не определен

Пример JSFiddle здесь: http://jsfiddle.net/9s5Px/11/

Вот HTML-разметка:

<div id="container">
    <div class="foo">
        <p>Div A</p>
    </div>

    <div class="foo">
        <p>Div B</p>
    </div>

    <div class="foo">
        <p>Div C</p>
    </div>
</div>

И JavaScript:

$('.foo').fadeOut('fast');

var count = $('.foo').length;
console.log(count);

var currentItem = 0;

function switchDiv() {
    $('.foo').get(currentItem).fadeOut();
    if (currentItem < count - 1) {            
        $('.foo').get(currentItem + 1).fadeIn();
    }
    else {        
        $('.foo').get(currentItem).fadeOut();
        currentItem = 0;
        $('.foo').get(0).fadeIn();
    }        
}

setTimeout("switchDiv()", 5000 );

Ответы [ 3 ]

5 голосов
/ 03 января 2012

Ваша строка кода, которую вы передаете setTimeout, не имеет доступа к вашему локальному закрытию.Это eval редактируется глобально.

Передайте ему саму функцию, а не строку:

setTimeout(switchDiv, 5000);

См. здесь , ошибок нет.

2 голосов
/ 03 января 2012

У вас есть проблема с областью видимости в вашем jsfiddle.Не уверен насчет реального кода, но так как вы не показываете, как вызывается этот js, я предполагаю, что это та же проблема.

Обратите внимание, что jsfiddle выполнит код, указанный вами в обработчике $(document).ready() (см.параметры в левом верхнем углу), и поэтому вы switchDiv будет определен там.Где, когда ваш тайм-аут ищет switchDiv для глобального объекта, и фактически это setTimeout("window.switchDiv()", 5000);

Решение состоит в том, чтобы либо передать ссылку на функцию в setTImeout, либо определить setTimeout в глобальной области, например this .

В качестве примечания: функция get() возвращает фактический объект DOM.То, что вы, вероятно, ищете, это eq(), но обратите внимание, что эквалайзер основан на 1.

0 голосов
/ 03 января 2012

две проблемы здесь:

1.use

setTimeout(switchDiv, 5000); 

вместо оценки строки.

2.внутри switchDiv, вы использовали функцию get для возвратаэлемент dom в объекте jQuery и, следовательно, методы fadeIn и fadeOut неприменимы.

Модифицированный src:

$('.foo').fadeOut('fast');

var count = $('.foo').length;
console.log(count);

var currentItem = 0;

function switchDiv() {
    $($('.foo').get(currentItem)).fadeOut();
    if (currentItem < count - 1) {            
        $($('.foo').get(currentItem + 1)).fadeIn();
    }
    else {        
        $($('.foo').get(currentItem)).fadeOut();
        currentItem = 0;
        $($('.foo').get(0)).fadeIn();
    }        
}

setTimeout(switchDiv, 5000 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...