Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Readyfast
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
1

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

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

Запустив мой файл, нажмите на любую белую шашку и вылезет ошибка : Cannot read property "point" of indefined
. Она связана с индексом массива в 156 строчке и я примерно понимаю почему не видит метод point, но мне нужно получить его значение лично каждого элемента массива shahkaW[]. Как правильно присвоить onclick, чтобы в нём я мог получить доступ к shaskaW[].point?
PHPHTML
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2018, 22:09
Ответы с готовыми решениями:

С помощью onclick в alert вывести индекс элемента на котором сработало событие
Имеется много элементов типа &lt;td class=&quot;myClass&quot;&gt;&lt;/td&gt; &lt;td...

Получить индекс минимального элемента массива
есть массив Как получить ключ минимального значения?

Неправильно выводится последний индекс массива
Еще один вопрос возник. Удалил первый и последний элемент массива пункт 1 на...

Как узнать индекс нажатого элемента массива
Есть такой список: &lt;ul id=&quot;navigation&quot;&gt; &lt;li class=&quot;nav active&quot;&gt;&lt;/li&gt; ...

Как получить индекс массива по его присвоенному значению?
Дано: dateId = 1; dateId = 16; dateId = 5; или dateId Как получить...

10
atanov
191 / 190 / 72
Регистрация: 26.05.2016
Сообщений: 1,221
13.01.2018, 22:39 2
Попробуйте так:

Javascript
1
shashkaW[num].cns.onclick = window[func];
0
MrOnlineCoder
Всегда онлайн
418 / 367 / 142
Регистрация: 07.04.2013
Сообщений: 1,708
Завершенные тесты: 2
14.01.2018, 00:16 3
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
Readyfast
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
14.01.2018, 07:42  [ТС] 4
Канвас с кружочком как бы для вида, что шашка материальная, и для того, чтобы можно было нажать на неё.

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

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

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

Добавлено через 5 минут
TinSemenova, да вы правы я хочу: "сгенерировать событие click чтобы определялось, какая белая шашка нажата"
0
TinSemenova
85 / 65 / 25
Регистрация: 09.10.2017
Сообщений: 180
17.01.2018, 08:54 7
Здравствуйте!
Вот и я пыталась разобраться вчера.
Но получилось, что по клику на любую белую шашку выдаётся весь canvas - все белые шашки.
0
Readyfast
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
17.01.2018, 13:24  [ТС] 8
Javascript
1
2
3
4
shashkaW[0].cns.onclick = function(){
 
        console.log(shashkaW[0].point);
}
Я сам нашёл ответ: нужно для каждого отдельно "вручную" писать этот код, изменяя индекс. Но если бы не было бы такого ограниченненого и определённого количества шашек, то создать работающий onclick было бы не возможно. Спасибо всем кто отвечал!
0
klopp
169 / 166 / 105
Регистрация: 14.10.2017
Сообщений: 523
17.01.2018, 18:36 9
Цитата Сообщение от Readyfast Посмотреть сообщение
создать работающий onclick было бы не возможно
Javascript
1
shashkaW.forEach( (el, index) => el.cns.onclick = console.log(shashkaW[index].point));
Я правда,не вкуриваю,для чего здесь cns
0
Readyfast
0 / 0 / 0
Регистрация: 13.01.2018
Сообщений: 5
18.01.2018, 06:22  [ТС] 10
klopp, я каждой ячейке присвоил объект где 2 значения: канвас с нарисованной шашкой(cns) и её положение на доске(point).
0
klopp
169 / 166 / 105
Регистрация: 14.10.2017
Сообщений: 523
18.01.2018, 13:12 11
Цитата Сообщение от Readyfast Посмотреть сообщение
я каждой ячейке присвоил объект
я имел ввиду для чего cns вот здесь:
Javascript
1
shashkaW[0].cns.onclick = function(){
событие происходит с html-элементом,а не со свойством объекта, и обработчик события назначается html-элементу
Javascript
1
shashkaW[0].onclick = function(){
0
18.01.2018, 13:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2018, 13:12

Определить текущий индекс, на котором находится курсор массива
var arr, , , ] for (var i = 0, L = inputArray.length; i &lt; L; i++) { ...

Onclick, передача переменной в скрипт
Всем привет, я нуб в js. Прошу помощи с onclick, суть заключается в том что...

Значение массива в переменной
Можно ли занести значение из массива в переменную! если да, то как? при чем...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru