Почему Stackoverflow динамически связывает действия пользователя с javascript?

Проверяя HTML-источник вопроса, я вижу, например:

<a id = "comments-link-xxxxx" class = "comments-link">add comment</a><noscript>&nbsp;JavaScript is needed to access comments.</noscript>

А затем в источнике javascript:

// Setup our click events..
$().ready(function() {    
        $("a[id^='comments-link-']").click(function() { comments.show($(this).attr("id").substr("comments-link-".length)); });    
});

Кажется, что все события щелчка пользователя связаны таким образом.

Недостатки этого подхода очевидны для людей, просматривающих сайт без javascript, но каковы преимущества динамического добавления событий с помощью javascript по сравнению с их непосредственным объявлением?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
452
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Единственное преимущество, которое я вижу, - это уменьшение размера страницы и, следовательно, меньшая потребность в полосе пропускания.

Обновлено: поскольку меня голосуют против, позвольте мне более подробно объяснить мой ответ.

Я хочу сказать, что использование ссылки в качестве пустого якоря - это просто плохая практика, не более того! Конечно, отличное отделение JavaScript логика от HTML. Конечно, рефакторинг и отладка проще. Но здесь это противоречит главному принципу ненавязчивого JavaScript: Изящная деградация!

Хорошим решением было бы иметь возможность вызова комментариев: один через РЕАЛЬНУЮ ссылку, которая будет указывать на простую страницу, показывающую комментарий, а другая, которая возвращает только комментарии (в нотации JSON или аналогичном формате) с целью быть вызывается через AJAX для вставки прямо на главную страницу.

При этом метод, использующий метод AJAX, должен также позаботиться об отмене другого вызова, чтобы избежать перенаправления пользователя на простую страницу. Это был бы ненавязчивый JavaScript. Здесь просто JavaScript использует неправильно используемый тег привязки.

Не уверен, почему за это вас голосуют против - ни один конечный пользователь не выиграет от того, что было сделано, поскольку, как вы упомянули, ссылки в любом случае совершенно бесполезны без JavaScript.

Jonny Buchanan 29.09.2008 03:52

Таким образом, у вас может быть легкая страница, на которой вы можете обрабатывать все свои действия с помощью javascript. Вместо того, чтобы использовать множество различных URL-адресов и действий, встроенных в страницу, просто напишите одну функцию javascript, которая находит ссылку и подключает ее, независимо от того, где на странице вы сбрасываете эту ссылку «комментарий». Это избавляет грузы от повторения html :)

Ответ принят как подходящий
  • Вам не нужно снова и снова вводить одну и ту же строку в HTML (что, если бы ничего другого, увеличило бы количество опечаток для отладки)
  • Вы можете передать HTML / CSS дизайнеру, которому не нужны навыки работы с javascript.
  • У вас есть программный контроль над тем, какие обратные вызовы вызываются и когда
  • Это более элегантно, потому что соответствует концептуальному разделению между макетом и поведением.
  • Легче модифицировать и рефакторинг

Что касается последнего пункта, представьте, что вы хотите добавить значок «показать комментарии» где-нибудь еще в шаблоне. Было бы очень легко привязать тот же обратный вызов к значку.

Присоединение событий через API событий, а не в разметке - это ядро ​​ненавязчивого javascript. Приглашаем вас прочитать эта статья в Википедии, чтобы получить полный обзор того, почему ненавязчивый javascripting так важен.

Точно так же, как вы отделяете стили от разметки, вы хотите отделить скрипты от разметки, включая события.

Я бы сказал, что это скорее средство ненавязчивого JavaScript. Увы, Stack Overflow игнорирует реальное ядро ​​ненавязчивого JavaScript, а именно создание веб-сайтов, которые работают для всех, независимо от того, доступен ли у них JavaScript или включен.

Jonny Buchanan 28.09.2008 16:29

Вы технически правы, но я считаю, что дни обслуживания пользователей с отключенным javascript подходят к концу. Как и поддержка IE6, это еще одно наследие, сдерживающее Интернет.

Eran Galperin 28.09.2008 17:43

Я считаю это одним из фундаментальных принципов хорошей разработки программного обеспечения:

Разделение презентации и логики.

HTML / CSS - это, по сути, язык представления. Javascript предназначен для создания логики. По возможности рекомендуется отделить любую логику от презентации.

Другие вопросы по теме