PDA

Просмотр полной версии : Оптимизация кода


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

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

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

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

Код находится здесь: https://gist.github.com/Pakulichev/0857ddac86309f11b5e92bf193cfeeaa (https://www.blast.hk/redirect/aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vUGFrdWxpY2hldi8wOD U3ZGRhYzg2MzA5ZjExYjVlOTJiZjE5M2NmZWVhYQ).

RoffDaniel
15.07.2019, 11:14
Через массив пробовал?

ImPasha
15.07.2019, 11:20
Через массив пробовал?


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

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;*/