Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.02.2011, 20:18
Интересующийся
Отправить личное сообщение для Pumych Посмотреть профиль Найти все сообщения от Pumych
 
Регистрация: 25.12.2010
Сообщений: 29

Массив передается как undefined.
Делаю галлерею. Функция move() почему-то получает массив как undefined. Т.е. как будто массив jsArr вовсе не был создан, где ошибка?

Переменные:
windows.cur - индекс фотографии в массиве
windows.max - максимум длина массива с фотками
Функции:
move(): получает сдвиг (1 или -1) и массив фоток.
Выводит соответствующую фотку.
bigPic():выводит большую фотку в <div id="bigSample"></div>

В <body>:
Создается массив (позже будет массив из БД).
Выводится весь массив маленьких фоток.

В скрипте создаю массив JS в который переносится массив PHP.
В форме, в зависимости от нажатия ('<' или '>') вызываем функцию move() с заданным сдвигом. Вот код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Untitled Document</title>
        <script type="text/javascript">

            window.cur = 0;
            window.max = 7;
            
            function move(num, arr){
                alert(arr); 
                window.cur += num;
                if(window.cur<0) {window.cur = 0;}
                if(window.cur > window.max) {window.cur = window.max;}
                
                document.getElementById("bigSample").innerHTML="<img src='img/" + arr[window.cur] + "' width='500' height='350' >";
            }
        </script>
    </head>
    <body onload="firstLoad('img/belka.jpg')">
        <div id="bigSample"></div>
        <?php
            $img_arr=array();
            $img_arr[0] = 'belka.jpg';
            $img_arr[1] = 'les.jpg';
            $img_arr[2] = 'barsuk.jpg';
            $img_arr[3] = 'gora.jpg';
            $img_arr[4] = 'most.jpg';
            $img_arr[5] = 'nebo.jpg';
            $img_arr[6] = 'palma.jpg';
            $img_arr[7] = 'sneg.jpg';
        ?>

        <?php
            $path='img/'; 
            foreach($img_arr as $img){
            ?><img src="<?php echo $path.$img; ?>" width="55" height="70" onclick='bigPic("<?php echo $path.$img; ?>")' />
            <?php }
            
        ?>
         <script type="text/javascript">

            var jsArr = new Array(<?php echo implode(', ', $img_arr); ?>);
        </script>
        <form>
            <input type="button" name="backward" value="<" onClick="move(-1, jsArr)" />
            <input type="button" name="forward" value=">" onClick="move(+1, jsArr)"/> 
        </form> 

    </body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 08.02.2011, 21:15
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Потому что
var jsArr = new Array(...)
- это javascript,
а
<input type="button" name="backward" value="<" onClick="move(-1, jsArr)"/>
- это не javascript, а HTML-разметка, которая в этом месте не "понимает", что такое jsArr.
Создавайте элемент "backward" тоже средствами javascript:
var btn = document.createElement('input') ... потом вешайте на него btn.onclick = function()...
Ответить с цитированием
  #3 (permalink)  
Старый 08.02.2011, 21:16
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Вы про консоль ошибок слышали? Первым делом нужно было заглянуть туда.
Посмотрите на код, генерируемый php в месте инициализации переменной jsArr.
Ответить с цитированием
  #4 (permalink)  
Старый 08.02.2011, 23:31
Интересующийся
Отправить личное сообщение для Pumych Посмотреть профиль Найти все сообщения от Pumych
 
Регистрация: 25.12.2010
Сообщений: 29

Странно, но создаваемая мною функция move() так же часть JavaScript но вызывать ее получается. Где можно поподробнее почитать эту тему?

В какой программе существует консоль ошибок?
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2011, 10:27
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Плагин к Firefox FireBag.
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2011, 10:46
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Маэстро
Потому что
var jsArr = new Array(...)
- это javascript,
а
<input type="button" name="backward" value="<" onClick="move(-1, jsArr)"/>
- это не javascript, а HTML-разметка, которая в этом месте не "понимает", что такое jsArr.
Это вы что-то странное сказали.
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2011, 11:08
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Pumych
В какой программе существует консоль ошибок?
В браузере.
Ответить с цитированием
  #8 (permalink)  
Старый 09.02.2011, 13:13
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Kolyaj Посмотреть сообщение
Это вы что-то странное сказали.
Мда, это я "перегнул палку". При беглом взгляде на код подумал о другой частой ошибке:
<div id="aaa" name="bbb">privet</div>
<script type="text/javascript">
function move1(x){alert(x.innerHTML)}
function move2(x){alert(x.innerHTML)}
</script>
<input type="button" onclick="move1(aaa)">
<br>
<input type="button" onclick="move2(bbb)">

В данном случае функция move1() работает, а move2() - не работает, потому что идентификатор объекта, переданный в move() понимается javascript_ом, а имя объекта - не понимается.
Извиняюсь.
Ответить с цитированием
  #9 (permalink)  
Старый 09.02.2011, 13:20
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Pumych Посмотреть сообщение
В какой программе существует консоль ошибок?
В Опере консоль ошибок вызывается Ctrl+Shift+O.
Но проще всего поставьте alert(jsArr) после строки
var jsArr = new Array(<?php echo implode(', ', $img_arr); ?>);

и Вы увидите, что он из себя представляет.

или здесь:
input type="button" name="forward" value=">" onClick="alert(jsArr)"/>
Ответить с цитированием
  #10 (permalink)  
Старый 09.02.2011, 13:31
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Маэстро
потому что идентификатор объекта, переданный в move() понимается javascript_ом
Некоторыми браузерами.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как организовать RichEdit arma Элементы интерфейса 2 18.02.2010 14:57
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00
Как записать в массив новый объек а не ссылку на исходный объект Casufi Общие вопросы Javascript 12 08.02.2010 02:40
как записать id всех элементов в массив? SunYang Общие вопросы Javascript 21 06.02.2010 22:50
Как удалить массив? SunYang Общие вопросы Javascript 14 05.02.2010 14:31