ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Оптимизация кода (https://forum.antichat.xyz/showthread.php?t=1337713)

ImPasha 15.07.2019 05:42

Короче, вчера первый раз решил написать что-нибудь с использованием JavaScript. Нужно было кое-что реализовать.

В общем, есть несколько input'ов и checkbox, после нажатия которых определенная кнопка должна становиться активной.

Собственно, имеется небольшой код и вопрос заключается в оптимизации. На мой взгляд код можно смело именовать в pizdec.js.

Что можете посоветовать для оптимизации, может быть какие-нибудь другие пути решения проблемы?

Код находится здесь: https://gist.github.com/Pakulichev/0857ddac86309f11b5e92bf193cfeeaa.

RoffDaniel 15.07.2019 11:14

Через массив пробовал?

ImPasha 15.07.2019 11:20

Цитата:

Сообщение от RoffDaniel

Через массив пробовал?

Ещё более спорное решение. Да и вообще не знаю каким образом можно хуки с массивами связать.

RoffDaniel 15.07.2019 12:18

У меня идея только приравнять хуки к массиву, а потом спрашивать, какой из элементов массива не равен пустоте)

itsLegend 20.07.2019 03:05

Почему именно голый JS?

Нет смысла писать код, который будет всё время в одну строчку. Лол. Ты всегда можешь заюзать minifier.

Раз уж голый JS, то тогда вешай события на элементы (
Код:


), будет легче работать с элементом в функции.

Через массив/объекты это будет решить легче. На это не нужно много производительности (в пределах разумного, конечно).

Вот код, который частично тестил (до создания элементов не дошло, мне стало лень):

JavaScript:





Код:

var
buttongo
=
document
.
getElementById
(
'buttongo'
)
;
if
(
!
buttongo
)
{
throw
'Can not to find #buttongo'
;
}
var
validateValue
=
function
(
validateEl
)
{
return
validateEl
.
docElement
.
value
!==
null
&&
validateEl
.
docElement
.
value
!=
''
;
}
var
validateElements
=
{
nname
:
{
docElement
:
document
.
getElementById
(
'nname'
)
,
isValid
:
false
}
,
surname
:
{
docElement
:
document
.
getElementById
(
'surname'
)
,
isValid
:
false
}
,
number
:
{
docElement
:
document
.
getElementById
(
'number'
)
,
isValid
:
false
}
,
email
:
{
docElement
:
document
.
getElementById
(
'email'
)
,
isValid
:
false
}
,
checkrules
:
{
docElement
:
document
.
getElementById
(
'checkrules'
)
,
isValid
:
false
,
validateFn
:
function
(
)
{
return
this
.
docElement
.
checked
;
}
}
}
;
var
checkButton
=
function
(
issuer
)
/* FIXME: issuer isn't used */
{
var
validCounter
=
0
,
totalElements
=
0
;
// if we're using clear js
for
(
var
validateEl
in
validateElements
)
{
var
self
=
validateElements
[
validateEl
]
;
if
(
!
self
.
docElement
)
{
throw
'Unknown #'
+
validateEl
+
' element'
;
}
if
(
self
.
validateFn
!==
undefined
)
{
/*console.log(self);*/
self
.
isValid
=
self
.
validateFn
(
)
;
}
else
{
self
.
isValid
=
validateValue
(
self
)
;
}
if
(
self
.
isValid
)
validCounter
++
;
totalElements
++
;
}
if
(
validCounter
==
totalElements
)
{
buttongo
.
classList
.
add
(
'disabled'
)
;
}
else
{
buttongo
.
classList
.
remove
(
'disabled'
)
;
}
}
/** Ссылаясь на то, что на элементы уже повешены события в HTML **/
/*checkrules.onclick = checkButton;
nname.onchange = checkButton;
surname.onchange = checkButton;
number.onchange = checkButton;
email.onchange = checkButton;*/



Время: 03:15