Есть много причин, чтобы избежать встроенного JavaScript и одним из наиболее важных из них является поддерживаемость кода.
Быстрый пример (я использую jQuery просто для демонстрационных целей).
<p class="element" onclick="doSomething();">Click me</p>
<p class="element" onclick="doSomething();">Click me</p>
<p class="element" onclick="doSomething();">Click me</p>
<p class="element" onclick="doSomething();">Click me</p>
<p class="element" onclick="doSomething();">Click me</p>
<p class="element" onclick="doSomething();">Click me</p>
Что делать, если вдруг вы получите запрос на изменение всех своих абзацев для выполнения другой функции? В вашем примере вам придется изменить все вручную в своем HTML-коде. Однако, если вы решите отделить HTML от JavaScript, вы можете просто сделать это следующим образом.
<p class="element">Click me</p>
<p class="element">Click me</p>
<p class="element">Click me</p>
<p class="element">Click me</p>
<p class="element">Click me</p>
<p class="element">Click me</p>
$('.element').bind('click', doSomethingElse);
HTML-код также более чист, что позволяет дизайнерам сосредоточиться исключительно на дизайне, не опасаясь, что они могут действительно сломать что-то при работе над проектом, который также включает других людей.
EDIT: пример для моего комментария ниже.
Project = {
// All the variables/constants/objects that need to be globally accessible inside the Project object.
init : function(){
// Main entry point...
this.MainMenu.init();
// Rest of the code which should execute the moment Project is initiated.
}
}
Project.MainMenu = {
// All the variables/constants/objects that need to be accessible only to MainMenu.
init : function(){ // Is run immediatelly by Project.init()
// Event handlers relevant to the main menu are bound here
// Rest of the initialization code
}
}
Project.SlideShow = {
// All the variables/constants/objects that need to be accessible only to SlideShow.
init : function(){ // Is run only on pages that really require it.
// Event handlers for the slideshow.
}
}
Это должно сработать. Обратите внимание, что имена столбцов с пробелами в них немного изменены («Product cat.» На «Product.cat.» И т. Д.)
df <- df %>%
mutate(Product.cat. = case_when(nchar(Product.cat.) == 1 ~ paste0(Product.cat.,'mm'),
nchar(Product.cat.) == 2 ~ paste0(Product.cat.,'m'),
TRUE ~ Product.cat.))