JS Оптимизация кода

Pakulichev

Software Developer & System Administrator
Автор темы
Друг
1,789
2,130
Короче, вчера первый раз решил написать что-нибудь с использованием JavaScript. Нужно было кое-что реализовать.
В общем, есть несколько input'ов и checkbox, после нажатия которых определенная кнопка должна становиться активной.
Собственно, имеется небольшой код и вопрос заключается в оптимизации. На мой взгляд код можно смело именовать в pizdec.js.
Что можете посоветовать для оптимизации, может быть какие-нибудь другие пути решения проблемы?
Код находится здесь: https://gist.github.com/Pakulichev/0857ddac86309f11b5e92bf193cfeeaa.
 
Решение
Почему именно голый JS?
Нет смысла писать код, который будет всё время в одну строчку. Лол. Ты всегда можешь заюзать minifier.
Раз уж голый JS, то тогда вешай события на элементы (<input type="checkbox" id="checkrules" onclick="javascript:checkButton(this);" />), будет легче работать с элементом в функции.
Через массив/объекты это будет решить легче. На это не нужно много производительности (в пределах разумного, конечно).

Вот код, который частично тестил (до создания элементов не дошло, мне стало лень):
JavaScript:
var buttongo = document.getElementById('buttongo');
if (!buttongo) {
    throw 'Can not to find #buttongo';
}

var validateValue = function(validateEl) {
    return validateEl.docElement.value !== null &&...

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,447
Почему именно голый JS?
Нет смысла писать код, который будет всё время в одну строчку. Лол. Ты всегда можешь заюзать minifier.
Раз уж голый JS, то тогда вешай события на элементы (<input type="checkbox" id="checkrules" onclick="javascript:checkButton(this);" />), будет легче работать с элементом в функции.
Через массив/объекты это будет решить легче. На это не нужно много производительности (в пределах разумного, конечно).

Вот код, который частично тестил (до создания элементов не дошло, мне стало лень):
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;*/
 
Последнее редактирование:
  • Нравится
Реакции: RoffDaniel