SlideShare a Scribd company logo
Ненавязчивый “Unobtrusive” JavaScript Сергеев Алексей «Открытые Веб-Технологии» [email_address]
Progressive Enhancement   Всё содержание сайта доступно в любом браузере Вся функциональность доступна в любом браузере Семантическая верстка Представление отделено от содержания   за счёт внешнего  CSS Поведение отделено от содержания за счёт « Unobtrusive »  JavaScript
Ненавязчивый  JavaScript   Главные принципы :  весь  JS- код находится во внешнем файле обработчики событий   добавляются после загрузки страницы с   помощью специальных функций стили добавляются за счёт атрибутов  class  и  id , а не за счёт прямого указания значений внутри  JavaScript -функций
Пример реализации Переход по ссылке, требующей  авторизацию
Поиск необходимого элемента   getElementById getElementsByTagName button = document.getElementById('submitter'); links = document.getElementsByTagName('a');
Поиск необходимого элемента   <ul id= &quot; menu &quot; > <li><a href= &quot; /about &quot; > О   компании </a></li> <li><a href= “ / products &quot; > Продукция </a></li> <li><a href= &quot; /contacts &quot; > Контакты </a></li> </ul> function getMenuLinks(){ var parentObj = document.getElementById('menu'); var menuLinks = parentObj.getElementsByTagName('a'); return menuLinks ; }
Поиск необходимого элемента   <input class=&quot;required&quot; name=&quot;email&quot; /> <input class=&quot;required&quot; name=&quot;phone&quot; /> function getRequired(){ var inputs = document.getElementsByTagName('input'); var requiredInputs = new Array; for ( var i = 0; i < inputs.length; i++ ) { if ( inputs[i].className.match('required‘) ) requiredInputs.push(inputs[i]); } return requiredInputs; }
Дерево элементов
Добавление обработчика   Плохие способы <a href=&quot;#&quot; onclick=&quot;login();&quot;> <a href=&quot;javascript:login();&quot;> <a href=&quot;javascript:void(0);&quot; id=&quot;login&quot;> document.getElementById('login').onclick = function(){ … }
Добавление обработчика   DOM event model: addEventListener removeEventListener MSIE: attachEvent detachEvent
Добавление обработчика   function addEvent(obj, evType, func, useCapture){ if (obj.addEventListener){ obj.addEventListener(evType, func, useCapture); return true; } else if (obj.attachEvent){ var r = obj.attachEvent('on'+evType, func); return r; } else { obj['on'+evType] = func; } }
Отмена исходного действия   DOM event model: preventDefault stopPropagation MSIE: window.event.returnValue window.event.cancelBubble
Отмена исходного действия   function cancelDefault(e){ if ( e && e.preventDefault   && e.stopPropagation() ){ e.stopPropagation(); e.preventDefault(); } if ( window.event ){ window.event.cancelBubble = true; window.event.returnValue = false; } }
Источник события DOM Event Model e.target MSIE window.event.srcElement if ( window.event && window.event.srcElement ){ elem = window.event.srcElement; } else if ( e && e.target ) { elem = e.target; } else { return; }
AJAX   Сначала не- AJAX  версия Добавьте обработчики событий, которые вместо ссылок и кнопок будут пересылать данные на сервер через  XMLHttpRequest Используте атрибуты  href   и  action Для простоты используйте  AHAH  ( Asy n chronous HTML and HTTP )
Спасибо за внимание!
Ad

More Related Content

Viewers also liked (6)

Влад Селиверстов – Веб-сервер Phantom
Влад Селиверстов – Веб-сервер Phantom  Влад Селиверстов – Веб-сервер Phantom
Влад Селиверстов – Веб-сервер Phantom
Media Gorod
 
Управление проектами по созданию продуктов в Афише
Управление проектами по созданию продуктов в АфишеУправление проектами по созданию продуктов в Афише
Управление проектами по созданию продуктов в Афише
Media Gorod
 
распределенная архитектура Lamp приложений петр зайцев
распределенная архитектура Lamp приложений   петр зайцевраспределенная архитектура Lamp приложений   петр зайцев
распределенная архитектура Lamp приложений петр зайцев
Media Gorod
 
Web Index Report 2009-06
Web Index Report 2009-06Web Index Report 2009-06
Web Index Report 2009-06
Media Gorod
 
Hl2008 Wtf Hl 169
Hl2008 Wtf Hl 169Hl2008 Wtf Hl 169
Hl2008 Wtf Hl 169
Media Gorod
 
E travel 2013 ufs-f
E travel 2013 ufs-fE travel 2013 ufs-f
E travel 2013 ufs-f
Media Gorod
 
Влад Селиверстов – Веб-сервер Phantom
Влад Селиверстов – Веб-сервер Phantom  Влад Селиверстов – Веб-сервер Phantom
Влад Селиверстов – Веб-сервер Phantom
Media Gorod
 
Управление проектами по созданию продуктов в Афише
Управление проектами по созданию продуктов в АфишеУправление проектами по созданию продуктов в Афише
Управление проектами по созданию продуктов в Афише
Media Gorod
 
распределенная архитектура Lamp приложений петр зайцев
распределенная архитектура Lamp приложений   петр зайцевраспределенная архитектура Lamp приложений   петр зайцев
распределенная архитектура Lamp приложений петр зайцев
Media Gorod
 
Web Index Report 2009-06
Web Index Report 2009-06Web Index Report 2009-06
Web Index Report 2009-06
Media Gorod
 
Hl2008 Wtf Hl 169
Hl2008 Wtf Hl 169Hl2008 Wtf Hl 169
Hl2008 Wtf Hl 169
Media Gorod
 
E travel 2013 ufs-f
E travel 2013 ufs-fE travel 2013 ufs-f
E travel 2013 ufs-f
Media Gorod
 

Similar to ненавязчивый Java Script алексей сергеев (20)

Введение в Django
Введение в DjangoВведение в Django
Введение в Django
Илья Барышев
 
Внедрение системы веб аналитики в информационный сайт
Внедрение системы веб аналитики в информационный сайтВнедрение системы веб аналитики в информационный сайт
Внедрение системы веб аналитики в информационный сайт
Rezonans
 
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf Conference
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
Дмитрий Бумов
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
Georgy Turevich
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
Uladzimir Kryvenka
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
Media Gorod
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
Roman Brovko
 
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
sqadays8
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
Paul Stashevsky
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 
Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.
MageCloud
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
Technopark
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Глеб Тарасов
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1
dima_kuzovlev
 
WordCamp Russia 2015: Фильтры и события в WordPress.
WordCamp Russia 2015: Фильтры и события в WordPress.WordCamp Russia 2015: Фильтры и события в WordPress.
WordCamp Russia 2015: Фильтры и события в WordPress.
Igor Zinovyev
 
Автоматический контроль качества front-end-содержимого
Автоматический контроль качества front-end-содержимогоАвтоматический контроль качества front-end-содержимого
Автоматический контроль качества front-end-содержимого
Media Gorod
 
Внедрение системы веб аналитики в информационный сайт
Внедрение системы веб аналитики в информационный сайтВнедрение системы веб аналитики в информационный сайт
Внедрение системы веб аналитики в информационный сайт
Rezonans
 
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf Conference
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
Дмитрий Бумов
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
Georgy Turevich
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
Uladzimir Kryvenka
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
Media Gorod
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
Roman Brovko
 
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
sqadays8
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
Paul Stashevsky
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 
Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.
MageCloud
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
Technopark
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Глеб Тарасов
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1
dima_kuzovlev
 
WordCamp Russia 2015: Фильтры и события в WordPress.
WordCamp Russia 2015: Фильтры и события в WordPress.WordCamp Russia 2015: Фильтры и события в WordPress.
WordCamp Russia 2015: Фильтры и события в WordPress.
Igor Zinovyev
 
Автоматический контроль качества front-end-содержимого
Автоматический контроль качества front-end-содержимогоАвтоматический контроль качества front-end-содержимого
Автоматический контроль качества front-end-содержимого
Media Gorod
 
Ad

More from Media Gorod (20)

Iidf market watch_2013
Iidf market watch_2013Iidf market watch_2013
Iidf market watch_2013
Media Gorod
 
Travel shop 2013
Travel shop 2013Travel shop 2013
Travel shop 2013
Media Gorod
 
Kozyakov pay u_e-travel2013
Kozyakov pay u_e-travel2013Kozyakov pay u_e-travel2013
Kozyakov pay u_e-travel2013
Media Gorod
 
13909772985295c7a772abc7.11863824
13909772985295c7a772abc7.1186382413909772985295c7a772abc7.11863824
13909772985295c7a772abc7.11863824
Media Gorod
 
As e-travel 2013
As   e-travel 2013As   e-travel 2013
As e-travel 2013
Media Gorod
 
Ishounkina internet research-projects
Ishounkina internet research-projectsIshounkina internet research-projects
Ishounkina internet research-projects
Media Gorod
 
Orlova pay u group_290813_
Orlova pay u group_290813_Orlova pay u group_290813_
Orlova pay u group_290813_
Media Gorod
 
Ep presentation (infographic 2013)
Ep presentation (infographic 2013)Ep presentation (infographic 2013)
Ep presentation (infographic 2013)
Media Gorod
 
Iway slides e-travel_2013-11_ready
Iway slides e-travel_2013-11_readyIway slides e-travel_2013-11_ready
Iway slides e-travel_2013-11_ready
Media Gorod
 
Data insight e-travel2013
Data insight e-travel2013Data insight e-travel2013
Data insight e-travel2013
Media Gorod
 
Электронное Правительство как Продукт
Электронное Правительство как ПродуктЭлектронное Правительство как Продукт
Электронное Правительство как Продукт
Media Gorod
 
Lean мышление / Специфика Lean Startup
Lean мышление / Специфика Lean StartupLean мышление / Специфика Lean Startup
Lean мышление / Специфика Lean Startup
Media Gorod
 
Глобальный взгляд на мобильный мир (Nielsen)
 Глобальный взгляд на мобильный мир (Nielsen) Глобальный взгляд на мобильный мир (Nielsen)
Глобальный взгляд на мобильный мир (Nielsen)
Media Gorod
 
Как россияне используют смартфоны (Nielsen)
 Как россияне используют смартфоны (Nielsen) Как россияне используют смартфоны (Nielsen)
Как россияне используют смартфоны (Nielsen)
Media Gorod
 
Мобильный интернет в России (MailRuGroup)
Мобильный интернет в России (MailRuGroup) Мобильный интернет в России (MailRuGroup)
Мобильный интернет в России (MailRuGroup)
Media Gorod
 
Karlovyvaryparti 130406024405-phpapp02
Karlovyvaryparti 130406024405-phpapp02Karlovyvaryparti 130406024405-phpapp02
Karlovyvaryparti 130406024405-phpapp02
Media Gorod
 
Iidf market watch_2013
Iidf market watch_2013Iidf market watch_2013
Iidf market watch_2013
Media Gorod
 
Travel shop 2013
Travel shop 2013Travel shop 2013
Travel shop 2013
Media Gorod
 
Kozyakov pay u_e-travel2013
Kozyakov pay u_e-travel2013Kozyakov pay u_e-travel2013
Kozyakov pay u_e-travel2013
Media Gorod
 
13909772985295c7a772abc7.11863824
13909772985295c7a772abc7.1186382413909772985295c7a772abc7.11863824
13909772985295c7a772abc7.11863824
Media Gorod
 
As e-travel 2013
As   e-travel 2013As   e-travel 2013
As e-travel 2013
Media Gorod
 
Ishounkina internet research-projects
Ishounkina internet research-projectsIshounkina internet research-projects
Ishounkina internet research-projects
Media Gorod
 
Orlova pay u group_290813_
Orlova pay u group_290813_Orlova pay u group_290813_
Orlova pay u group_290813_
Media Gorod
 
Ep presentation (infographic 2013)
Ep presentation (infographic 2013)Ep presentation (infographic 2013)
Ep presentation (infographic 2013)
Media Gorod
 
Iway slides e-travel_2013-11_ready
Iway slides e-travel_2013-11_readyIway slides e-travel_2013-11_ready
Iway slides e-travel_2013-11_ready
Media Gorod
 
Data insight e-travel2013
Data insight e-travel2013Data insight e-travel2013
Data insight e-travel2013
Media Gorod
 
Электронное Правительство как Продукт
Электронное Правительство как ПродуктЭлектронное Правительство как Продукт
Электронное Правительство как Продукт
Media Gorod
 
Lean мышление / Специфика Lean Startup
Lean мышление / Специфика Lean StartupLean мышление / Специфика Lean Startup
Lean мышление / Специфика Lean Startup
Media Gorod
 
Глобальный взгляд на мобильный мир (Nielsen)
 Глобальный взгляд на мобильный мир (Nielsen) Глобальный взгляд на мобильный мир (Nielsen)
Глобальный взгляд на мобильный мир (Nielsen)
Media Gorod
 
Как россияне используют смартфоны (Nielsen)
 Как россияне используют смартфоны (Nielsen) Как россияне используют смартфоны (Nielsen)
Как россияне используют смартфоны (Nielsen)
Media Gorod
 
Мобильный интернет в России (MailRuGroup)
Мобильный интернет в России (MailRuGroup) Мобильный интернет в России (MailRuGroup)
Мобильный интернет в России (MailRuGroup)
Media Gorod
 
Karlovyvaryparti 130406024405-phpapp02
Karlovyvaryparti 130406024405-phpapp02Karlovyvaryparti 130406024405-phpapp02
Karlovyvaryparti 130406024405-phpapp02
Media Gorod
 
Ad

ненавязчивый Java Script алексей сергеев

  • 1. Ненавязчивый “Unobtrusive” JavaScript Сергеев Алексей «Открытые Веб-Технологии» [email_address]
  • 2. Progressive Enhancement Всё содержание сайта доступно в любом браузере Вся функциональность доступна в любом браузере Семантическая верстка Представление отделено от содержания за счёт внешнего CSS Поведение отделено от содержания за счёт « Unobtrusive » JavaScript
  • 3. Ненавязчивый JavaScript Главные принципы : весь JS- код находится во внешнем файле обработчики событий добавляются после загрузки страницы с помощью специальных функций стили добавляются за счёт атрибутов class и id , а не за счёт прямого указания значений внутри JavaScript -функций
  • 4. Пример реализации Переход по ссылке, требующей авторизацию
  • 5. Поиск необходимого элемента getElementById getElementsByTagName button = document.getElementById('submitter'); links = document.getElementsByTagName('a');
  • 6. Поиск необходимого элемента <ul id= &quot; menu &quot; > <li><a href= &quot; /about &quot; > О компании </a></li> <li><a href= “ / products &quot; > Продукция </a></li> <li><a href= &quot; /contacts &quot; > Контакты </a></li> </ul> function getMenuLinks(){ var parentObj = document.getElementById('menu'); var menuLinks = parentObj.getElementsByTagName('a'); return menuLinks ; }
  • 7. Поиск необходимого элемента <input class=&quot;required&quot; name=&quot;email&quot; /> <input class=&quot;required&quot; name=&quot;phone&quot; /> function getRequired(){ var inputs = document.getElementsByTagName('input'); var requiredInputs = new Array; for ( var i = 0; i < inputs.length; i++ ) { if ( inputs[i].className.match('required‘) ) requiredInputs.push(inputs[i]); } return requiredInputs; }
  • 9. Добавление обработчика Плохие способы <a href=&quot;#&quot; onclick=&quot;login();&quot;> <a href=&quot;javascript:login();&quot;> <a href=&quot;javascript:void(0);&quot; id=&quot;login&quot;> document.getElementById('login').onclick = function(){ … }
  • 10. Добавление обработчика DOM event model: addEventListener removeEventListener MSIE: attachEvent detachEvent
  • 11. Добавление обработчика function addEvent(obj, evType, func, useCapture){ if (obj.addEventListener){ obj.addEventListener(evType, func, useCapture); return true; } else if (obj.attachEvent){ var r = obj.attachEvent('on'+evType, func); return r; } else { obj['on'+evType] = func; } }
  • 12. Отмена исходного действия DOM event model: preventDefault stopPropagation MSIE: window.event.returnValue window.event.cancelBubble
  • 13. Отмена исходного действия function cancelDefault(e){ if ( e && e.preventDefault && e.stopPropagation() ){ e.stopPropagation(); e.preventDefault(); } if ( window.event ){ window.event.cancelBubble = true; window.event.returnValue = false; } }
  • 14. Источник события DOM Event Model e.target MSIE window.event.srcElement if ( window.event && window.event.srcElement ){ elem = window.event.srcElement; } else if ( e && e.target ) { elem = e.target; } else { return; }
  • 15. AJAX Сначала не- AJAX версия Добавьте обработчики событий, которые вместо ссылок и кнопок будут пересылать данные на сервер через XMLHttpRequest Используте атрибуты href и action Для простоты используйте AHAH ( Asy n chronous HTML and HTTP )
  翻译: