2014-01-29 6 views
0

Я читаю код другого пользователя с сайта, который они размещают на reddit, который они создали для создания генератора случайных имен. Я понимаю большую часть того, что происходит, за исключением выборочной проверки. Вот ссылка на сайт. http://saturdaykid.com/usernames/generator.html. Я все еще очень новичок в JavaScript, но этот сайт дает мне хорошее представление о том, как JavaScript используется на веб-сайте.Использование JavaScript для создания генератора случайных имен

Я не понимаю, что происходит в инструкции if. В методе Markup нет имен классов для элементов select или элементов элементов, которые я могу видеть. Итак, в основном, я не понимаю, что оператор if равен if (!selectedAdj), проверяя, является ли значение этого элемента равным нулю? почему он создает имя класса, если в разметке нет ни одного из них?

if (!selectedAdj) { 
     var adj = document.getElementById("adjective"); 
     adj.className = "notSelected"; 
     return false; 
    } else { 
     var adj = document.getElementById("adjective"); 
     adj.className = ""; 
    } 

Вот целая функция

// Ensures the user has chosen an adjective and a noun  
var validate = function() { 
    var adjectives = document.getElementById("adjective"); 
    var selectedAdj = adjectives.options[adjectives.selectedIndex].value; 
    if (!selectedAdj) { 
     var adj = document.getElementById("adjective"); 
     adj.className = "notSelected"; 
     return false; 
    } else { 
     var adj = document.getElementById("adjective"); 
     adj.className = ""; 
    } 
    var nouns = document.getElementById("noun"); 
    var selectedNoun = nouns.options[nouns.selectedIndex].value; 
    if (!selectedNoun) { 
     var noun = document.getElementById("noun"); 
     noun.className = "notSelected"; 
     return false; 
    } else { 
     var noun = document.getElementById("noun"); 
     noun.className = ""; 
    } 
    generator(selectedAdj, selectedNoun); 
}; 

ответ

1

"если (selectedAdj!) Проверки, если значение этого элемента равна нулю?"

-Да. Когда выбрана опция: значение = "", это непереходный javascript.

«Почему он создает имя класса, если в начале нет разметки?»

- создать ->назначить Classname (см http://saturdaykid.com/usernames/stylin.css для выбора .notSelected CSS), чтобы эффекты перехода.

он написал класс .notSelected в его CSS и он JavaScript с помощью назначить Classname если (! SelectedAdj) правда?

Когда человек, который приземлился на этой странице хиты «Сформировать Ваше имя», но доцент выбран ничего функция «Validate» будет первой проверки на «Прилагательное» и назначить этот класс для него и вернуться ложным, чтобы выйти из самой функции , Если «Adjective» присваивается классуName, присваивается значение «», результат пустого присваивания возвращает селектор наследования css на этот объект («.select» - in stylin.css). То же самое делается с «Сущностью». Если оба значения выбираются в следующем будем называть функцией «Генератор»

+0

Хорошо, я знаю только некоторые основы CSS, поэтому позвольте мне попробовать и понять это. Я предполагаю, что он написал класс .notSelected в своем css, и он использует javascript для назначения имени класса, если (! SelectedAdj) истинно? и если условие не равно null, оно присваивает className = ""? Почему он возвращает false? и почему он присваивает пустой строке классуName? –

+0

Я отредактировал ответ для этого комментария. –

1

Вот лучше реализация, которая делает почти то же самое (за исключением того, проверяет оба поля, даже если оба по-прежнему пусто), может быть, это немного легче понять:

var getSelected = function(elementId) { 
    // Gets the "elementId" object 
    var element = document.getElementById(elementId); 
    // Gets it's currently selected value 
    var selected = element.options[element.selectedIndex].value; 
    if (!selected) { 
     // No value selected, set class to .notSelected 
     element.className = "notSelected"; 
     return false; 
    } 
    // A value was selected, remove class 
    element.className = ""; 
    // this element is valid 
    return selected; 
} 
var validate = function() { 
    var adjective = getSelected("adjectives"); 
    var noun = getSelected("nouns"); 
    if (adjective && noun) { 
     // Both are valid, continue 
     generator(adjective, noun); 
    } 
} 

Оригинальная функция имела много повторений.

+0

Итак, если значение присваивается пустой строкой, это считается нулевым? потому что когда оператор if проверяет 'if (! selected)', первый выбранный индекс будет вариантом «Выберите ваше приложение», которому в разметке присваивается 'value =" "'. Это сделает утверждение if истинным и вернет false? –

+1

Не совсем так, причина в том, что в javascript все значения считаются ложными (если вы не выполняете строгую проверку с помощью оператора ===): '' '', '0',' false', 'null',' undefined ' – Ezequiel

Смежные вопросы