Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5

Индекс массива в переменной и метод массива в функции onclick

13.01.2018, 22:09. Показов 1147. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Запустив мой файл, нажмите на любую белую шашку и вылезет ошибка : Cannot read property "point" of indefined
. Она связана с индексом массива в 156 строчке и я примерно понимаю почему не видит метод point, но мне нужно получить его значение лично каждого элемента массива shahkaW[]. Как правильно присвоить onclick, чтобы в нём я мог получить доступ к shaskaW[].point?
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
 
<div id="menu">
<h3>Шашки</h3>
Кто первый ходит?<br>
<button onclick="getI()" >Я</button>
<button onclick="getCom()" >Компьютер</button>
<br>
Какими шашками будете играть?
<br>
<button onclick="getW()" >Белые</button>
<button onclick="getB()" >Синие</button>
</div>
 
<style type="text/css">
body{
background:#ccc;
}
#kletka{
position:absolute;
width:38px;
height:38px;
}
#menu{
position: absolute;
z-index:2;
font-size:1.8em;
background:#ccc;
}
button
{
height:30px;
background:#fff;
}
 
</style>
<script type="text/javascript">
var kletka = [], posX =10,posY=10,color="#000", shashkaW = [], shashkaB = [],num=0;
 
//Начало создание всех предметов игры
function createSh(clr){
    if(clr=='#fff')
    {
    shashkaW[num] = {
    point:i,
    cns:null
    }
    
    shashkaW[num].cns = document.createElement('canvas');
    kletka[i].appendChild(shashkaW[num].cns);
    var cns = shashkaW[num].cns.getContext("2d");
    
    }
    else
    {
        shashkaB[num] = document.createElement('canvas');
        kletka[i].appendChild(shashkaB[num]);
        cns = shashkaB[num].getContext("2d");
    }
    kletka[i].value = false;
    
    
    num++;
    cns.beginPath();
    cns.arc(19, 19, 15, 0, 2*Math.PI, false);
    cns.fillStyle = clr;
    cns.fill();
}
 
    for(var i=0;i<64;i++, posX+=38)
    {
    if(i%8==0 && i!=0)
    {posY+=38;
    posX=10;
    if (color=="#000")
    color="#fff";
    else
    color="#000";
    }
    kletka[i] = document.createElement('div');
    document.body.appendChild(kletka[i]);
    kletka[i].id = "kletka";
    kletka[i].style.left = posX+"px";
    kletka[i].style.top = posY+"px";
    kletka[i].value = false;
    kletka[i].style.background = color;
    if (color=="#000")
        {
        kletka[i].value = true;
        color="#fff";
        if(i+1%2!=0 && i<24)
                createSh('#fff');
        if(i>39)
        if(i+1%2!=0)
        createSh('#00f');
        }
    else
        color="#000";
    }
//Конец создание всех предметов игры
 
 
//Игровые функции
var player = 
{
    step: null,
    figa: null,
},
comp = 
{
    figa: null,
}, 
doIt;
 
function getI()
{
player.step = true;
}
function getCom()
{
player.step = false;
}
function getB()
{
player.figa = '#000';
comp.figa = '#fff';
}
function getW()
{
player.figa = '#fff';
comp.figa = '#000';
}
 
var start = setInterval(function(){
if ( player.figa!=null && player.step!=null)
{
var menu = document.getElementById("menu");
menu.style.display = "none";
clearInterval(start);
}
}, 100),
 
game = setInterval(
function(){
 
 
}, 1000);
 
for(num = 0; num<shashkaW.length; num++){
shashkaW[num].cns.onclick = function(){
        document.write(shashkaW[num].point);
    }
}
//Игровые функции
 
</script>
</body>
</html>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2018, 22:09
Ответы с готовыми решениями:

Метод для сортировки массива, методом пузырька - индекс находился вне границ массива
Доброго времени суток. Я изучаю С# недавно. Прочел похожие темы на форму, но так и не понял, как исправить эту ошибку.. Вот написал...

Метод принимающий индекс массива
public class Main { public static void main(String args) { Fabryka fabryka = new Fabryka(&quot;cherry&quot;); Sweets tab = fabryka.make(10); ...

Индекс максимального значения переменной из объекта элемента массива
List&lt;GameObject&gt; map для каждого элемента x,y есть пустой объект GameObject и рандомно добавлены еще несколько GO. У каждого GO есть поле...

10
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
13.01.2018, 22:39
Попробуйте так:

JavaScript
1
shashkaW[num].cns.onclick = window[func];
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
14.01.2018, 00:16
Readyfast, можно еще так:
JavaScript
1
2
3
4
5
6
7
8
    for (num = 0; num < shashkaW.length; num++) {
 
        var item = shashkaW[num];
 
        shashkaW[num].cns.onclick = function() {
            document.write(item.point);
        }
    }
Кстати, зачем вы на каждую шашку создаете отдельный канвас?
0
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
14.01.2018, 07:42  [ТС]
Канвас с кружочком как бы для вида, что шашка материальная, и для того, чтобы можно было нажать на неё.

Добавлено через 7 минут
MrOnlineCoder, срабатывае не не так как нужно. Я нажимаю на шашку и она должна мне показать своё место на клеточном поле. А у вас все шашки указывают на место положение одной 22ой шашки.
0
85 / 67 / 25
Регистрация: 09.10.2017
Сообщений: 208
16.01.2018, 17:35
Здравствуйте!

Вы хотите сгенерировать событие click чтобы определялось, какая белая шашка нажата?

Получить доступ к shaskaW[].point как Вы писали возможно:
JavaScript
1
2
3
4
for(num = 0; num<shashkaW.length; num++){
 
        console.log(shashkaW[num].point);
    }
0
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
16.01.2018, 17:59  [ТС]
TinSemenova, но всё это обёрнуто дожнобыть в онклик. Я обернул ваш код, но теперь он выдаёт положение(point) всех шашек сразу. А нужно лишь одной, той на которую я нажал

Добавлено через 5 минут
TinSemenova, да вы правы я хочу: "сгенерировать событие click чтобы определялось, какая белая шашка нажата"
0
85 / 67 / 25
Регистрация: 09.10.2017
Сообщений: 208
17.01.2018, 08:54
Здравствуйте!
Вот и я пыталась разобраться вчера.
Но получилось, что по клику на любую белую шашку выдаётся весь canvas - все белые шашки.
0
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
17.01.2018, 13:24  [ТС]
JavaScript
1
2
3
4
shashkaW[0].cns.onclick = function(){
 
        console.log(shashkaW[0].point);
}
Я сам нашёл ответ: нужно для каждого отдельно "вручную" писать этот код, изменяя индекс. Но если бы не было бы такого ограниченненого и определённого количества шашек, то создать работающий onclick было бы не возможно. Спасибо всем кто отвечал!
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
17.01.2018, 18:36
Цитата Сообщение от Readyfast Посмотреть сообщение
создать работающий onclick было бы не возможно
JavaScript
1
shashkaW.forEach( (el, index) => el.cns.onclick = console.log(shashkaW[index].point));
Я правда,не вкуриваю,для чего здесь cns
0
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
18.01.2018, 06:22  [ТС]
klopp, я каждой ячейке присвоил объект где 2 значения: канвас с нарисованной шашкой(cns) и её положение на доске(point).
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
18.01.2018, 13:12
Цитата Сообщение от Readyfast Посмотреть сообщение
я каждой ячейке присвоил объект
я имел ввиду для чего cns вот здесь:
JavaScript
1
shashkaW[0].cns.onclick = function(){
событие происходит с html-элементом,а не со свойством объекта, и обработчик события назначается html-элементу
JavaScript
1
shashkaW[0].onclick = function(){
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2018, 13:12
Помогаю со студенческими работами здесь

Поменять местами элементы массива А, имеющего нечётный индекс, на элементы массива В, имеющие чётный индекс, и найти минимальные элементы Амах и В мах
даны два массива А и В по 20 элементов в каждом. Поменять местами элементы массива А, имеющего нечётный индекс, на элементы массива В,...

Поменять местами элементы массива А, имеющие нечетный индекс, на элементы массива В, имеющие четный индекс
Недавно начал изучать Delphi. Все шло хорошо, пока не наткнулся на одну проблемку. &quot;Даны два массива А и В по 20 элементов в каждом....

Поменять местами элементы массива a, имеющие нечётный индекс на элементы массива b, имеющие чётный индекс
дан массив a и b содержащий по 20 элементов каждом.Поменять местами элементы массива a ,имеющие нечётный индекс на элементы массива b...

Поменять местами элементы массива А, имеющие нечетный индекс, на элементы массива В, имеющие четный индекс
Даны два массива А и В по 20 элементов в каждом. Поменять местами элементы массива А, имеющие нечетный индекс, на элементы массива В,...

Индекс массива является недопустимым для этого массива - MathCAD
Не могу понять в чем проблема, делал по разному все равно не выходит.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru