jQuery підводні камені, яких слід уникати [закрито]


210

Я починаю проект з jQuery.

Які підводні камені / помилки / неправильні уявлення / зловживання / зловживання мали у своєму проекті jQuery?


4
Це не повинно було бути закритим, щоб бути "неконструктивним". Деякі дуже корисні відповіді реалізуються, і це питання було зареєстровано 220 разів. Будь ласка, проголосуйте за повторне відкриття, якщо у вас є достатня карма.
Рой Прінс

Мені здається, jQuery сама по собі
грім190

Відповіді:


189

Не знаючи про ефективність та надмірне використання селекторів замість того, щоб призначати їх локальним змінним. Наприклад:-

$('#button').click(function() {
    $('#label').method();
    $('#label').method2();
    $('#label').css('background-color', 'red');
});

Замість:

$('#button').click(function() {
    var $label = $('#label');
    $label.method();
    $label.method2();
    $label.css('background-color', 'red');
});

Або ще краще з ланцюжком : -

$('#button').click(function() {
    $("#label").method().method2().css("background-color", "red"); 
});

Я виявив цей просвітницький момент, коли зрозумів, як працюють стеки викликів.

Редагувати: включені пропозиції в коментарі.


16
+1 для посилання на youtube. святе лайно я багато чого навчився.
Джейсон

23
Я думаю, що присвоювати речі локальним змінним - це чудово, але не забувайте про силу ланцюжка (з вашого прикладу): $ ("# label"). Method (). Method2 (). Css ("background-color", " червоний »);
Lance McNearney

Відео на YouTube було чудовим. Я бачив інші презентації Google на цю тему, і я все-таки дізнався кілька речей! Дякую!
Габріель Херлі

+1 також за посилання, відмінно!
Джош Стодола

7
Це своєрідна умова використовувати знак долара для змінних з контекстом jQuery. Тож ви можете хотіти писатиvar $label = $('#label');
Тім Бют

90

Зрозумійте, як використовувати контекст. Зазвичай селектор jQuery здійснюватиме пошук у всьому документі:

// This will search whole doc for elements with class myClass
$('.myClass');

Але ви можете пришвидшити пошук за допомогою пошуку в контексті:

var ct = $('#myContainer');
// This will search for elements with class myClass within the myContainer child elements
$('.myClass', ct);

9
Ааааааа! Ну, це виправлено близько 1 000 000 моїх помилок. +1
jammus

4
Здається, ваш останній пункт невірний - groups.google.co.uk/group/jquery-dev/browse_thread/thread/…
Джеймс

1
Дякуємо, що вказали на це JP. Тепер, що робити ... Чи слід видалити свою відповідь, щоб більше ніхто не зависав від свиней і міняв свій код ні за що?
slolife

Ні, це все-таки хороший момент, оптимізаційний. :)
Джеймс

2
jQuery перевіряє, чи контекст є примірником jQuery, тому немає причин для цього [0]. $('.myClass', ct);або якщо ви знаєте, що ct є екземпляром jQuery, ви можете використовувати findct.find(".myClass")
gradbot

62

Не використовуйте голі селектори класу, як це:

$('.button').click(function() { /* do something */ });

Це в кінцевому підсумку перегляне кожен елемент, щоб побачити, чи є у нього клас "кнопка".

Натомість ви можете допомогти, наприклад:

$('span.button').click(function() { /* do something */ });
$('#userform .button').click(function() { /* do something */ });

Про це я дізнався минулого року з блогу Ребекки Мерфі

Оновлення - Ця відповідь була надана понад 2 роки тому і не є правильною для поточної версії jQuery. Один із коментарів включає тест, який підтверджує це. Існує також оновлена ​​версія тесту, яка включає версію jQuery на момент цієї відповіді.


6
Я також був під враженням, що зворотне дійсно. Можливо, це стосується браузерів, які не реалізують getElementsByClassName, але в іншому випадку ви просто надаєте jQuery більше роботи. Мені дуже хотілося б, щоб Ребекка розмістила деякі орієнтири :)
Alex Barrett

7
Ви ВИ зменшуєте обсяг роботи, яку він повинен виконати. Це як сказати комусь, щоб дістати ваші шкарпетки з шухляди у комоді, а не казати їм діставати шкарпетки з вашої кімнати. Значно зменшує кількість "шукаючих" дій.
Підступність

4
Зворотний бік справедливий під час написання CSS (принаймні, включаючи тег елемента). Дивіться code.google.com/speed/page-speed/docs/…
kmiyashiro

7
@Sneakyness Не у всіх є точний аналог реального життя. Наприклад, $('.b')може використовуватись, document.getElementsByClassName('b')якщо браузер підтримує його, але це $('a.b')призведе до того, що він отримає всі відповідні елементи класу, bа потім підтвердить, що вони є якорями в двоступеневій роботі. Останнє звучить як більша робота для мене. Для аналогії в реальному житті спробуйте це: Знайдіть усі шкарпетки в моїй кімнаті. Тепер викиньте ті, яких немає в моєму комоді.
alex

2
Я вважаю, що помилкова думка щодо селекторів пояснюється тим, що у старих версіях jquery було швидше робити $ ('# foo'), а не $ ('div # foo'), оскільки за визначенням, ідентифікатор унікальний. Я майже впевнений, що це було виправлено в наступних випусках, але ця рекомендація стосувалася лише ідентифікаторів, а не інших типів селекторів
Alex Heyd

35

Спробуйте розділити анонімні функції, щоб ви могли їх повторно використовувати.

//Avoid
$('#div').click( function(){
   //do something
});

//Do do
function divClickFn (){
   //do something    
}

$('#div').click( divClickFn );

19
Я думаю, що це стосується приблизно такої ж міри, що синхронний (вбудований) код слід розбити на названі функції. Якщо у вас є шматок коду, який благає надати ім’я, тоді перейдіть до цього. Але не переміщуйте код поза рядком просто тому, що ви загортаєте його всередині функції; анонімні функції існують з поважних причин.
Dan Breslau

4
Насправді мені подобається давати «ім’я» своїй функції. Це дуже корисно, коли ви налагоджуєте код і замість того, щоб бачити нескінченний список анонімних функцій, ви бачите правильно названі функції.
SolutionYogi

1
Ваша думка добре сприйнята, і я, мабуть, сам цього кілька разів зіткнувся. Незважаючи на це, " приблизно однаковий ступінь" все ще працює для мене.
Dan Breslau

1
особливо якщо прив'язка відбувається в циклі!
daniellmb

Названі функції також вам дуже приносять користь при налагодженні; ніщо не смокче більше, ніж дивитися на стовпчик висоти 8 рівнів, який не має нічого, окрім (anonymous). Детальніше про цю пораду читайте тут: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…
ken

34
  • Не допускайте зловживань готовим документом.
  • Тримайте документ готовим лише до ініціалізації коду.
  • Завжди витягуйте функції за межами документа, готові, щоб їх можна було повторно використовувати.

Я бачив сотні рядків коду всередині оператора goc. Некрасивий, нечитабельний і неможливий у підтримці.


6
+1. Загалом, більша частина коду jQuery, який я бачив, використовує функції із сотнями рядків. Я не знаю, чому розробники jQuery не люблять використовувати менші функції.
SolutionYogi

6
@SolutionYogi, адже більшість - це просто ноби JS?
adamJLev

Я все за те, що я не вкладаю дуже довгі функції в документ готовий, це хороша порада. Однак виготовлення багатьох дрібних компонентних функцій, які виконуються із загальної функції, яка не готова до документа, не обов'язково є найкращою практикою. Якщо функція загального користування є єдиною, яка використовує ті фрагменти коду, вам краще ввести це в одну функцію, навіть якщо це важче читати. Функції виклику мають великі накладні витрати, і якщо ви використовуєте код лише в одному контексті, цього слід уникати.
sage88

34

Під час використання $.ajaxфункції для запитів Ajax до сервера, вам слід уникати використанняcomplete події для обробки даних відповідей. Він запустить, чи запит був успішним чи ні.

Замість цього completeвикористовуйтеsuccess .

Дивіться події Ajax у документах.


1
Я знову і назад про успіх проти повного, чи можете ви розширити, чому ви вважаєте, що завершення краще?
Ніл N

1
Я не кажу, що завершення - це краще. Що я намагався сказати, це те, що вам потрібно уникати оманливого використання повних та використовувати успіх, щоб мати можливість обробляти дані відповіді.
Артем Баргер

2
Ну, це завжди називається. Однак я б не погодився. Повна найкраща для приховування gif завантаження тощо. Ви повинні використовувати успіх для обробки відповіді та помилки для будь-яких помилок, звичайно.
redsquare

1
Він пропонує використовувати успіх замість повного. "завершено" завжди спрацьовує, коли запит ajax є "завершеним", не має значення, успішно чи невдало виконано.
SolutionYogi

@redsquare, чи можете ви розширити саме те, з чим ви не згодні? Я мав на увазі процес обробки даних, і не мав проти жодної картинки, що приховує / показує можливості, які ви маєте з повним обробником.
Артем Баргер

24

"Зв'язування" анімаційних подій з зворотними дзвінками.

Припустимо, ви хотіли анімувати абзац, що зникає після його клацання. Ви також хотіли згодом видалити елемент з DOM. Ви можете подумати, що ви можете просто зав'язати методи:

$("p").click(function(e) {
  $(this).fadeOut("slow").remove();
});

У цьому прикладі .remove () буде називатися раніше .fadeOut () завершиться, знищивши ваш ефект поступового згасання та просто змусивши елемент миттєво зникнути. Натомість, коли ви хочете запустити команду лише після завершення попередньої, використовуйте зворотний виклик:

$("p").click(function(e){
  $(this).fadeOut("slow", function(){
    $(this).remove();
  });
});

Другий параметр .fadeOut () - це анонімна функція, яка запуститься після завершення анімації .fadeOut (). Це спричиняє поступове вицвітання і подальше видалення елемента.


24

Якщо ви зв’яжете () одну і ту ж подію кілька разів, вона запуститься кілька разів. Зазвичай я завжди йду unbind('click').bind('click')просто для безпеки


2
Це не характерно для jQuery, хоча важливо пам’ятати.
SolutionYogi

11
Ви можете використовувати події в прямому ефірі, щоб не потрібно двічі пов'язувати ту саму подію.
Powerlord

live має свої (продуктивні) проблеми, якщо їх використовувати надмірно. Краще в 1.3.3, де можна дати контекст.
redsquare

23

Не зловживайте плагінами.

У більшості випадків вам знадобиться лише бібліотека та, можливо, користувальницький інтерфейс. Якщо ви будете простою, ваш код буде підтримуватися в довгостроковій перспективі. Не всі плагіни підтримуються та підтримуються, насправді більшість - ні. Якщо ви можете імітувати функціональність за допомогою основних елементів, я настійно рекомендую.

Плагіни легко вставити у свій код, заощаджуючи час, але коли вам знадобиться щось додаткове, погана ідея їх змінювати, оскільки ви втрачаєте можливі оновлення. Час, який ви заощадите на старті, згодом втратите на зміну застарілих плагінів.

Виберіть плагіни, якими ви користуєтесь розумно. Окрім бібліотеки та інтерфейсу користувача, я постійно використовую $ .cookie , $ .form , $ .validate та thickbox . В іншому я здебільшого розробляю власні додатки.


2
Що з сіткою? Ви робите своє?
jmav

так. від проекту до даних проекту надходять різними способами. Я вважаю за краще мати повний контроль, що реалізація цієї сітки допомагає мені лише до середини, і тоді мені доведеться імпровізувати.
Ельзо Валугі

ЯКЩО (дано достатньо часу), як правило, я вважаю за краще писати всі керовані даними маніпуляції (css / html) код безпосередньо. Іншими словами - не передайте дані в "плагін" і нехай він запускає html. його досить важко оцінити (півзахист) плагінів на поточну сумісність сфери, забути про майбутні вимоги. подумайте ... дизайнери, планувальники, менеджери, менеджери, менеджери. о, і клієнти, і користувачі. але якщо у вас є всі ці речі, вам не вистачить сказаного «часу». тому просто переходьте вже на використання jqgrid - ви витрачаєте час на роздуми. це зроблено ще?}
user406905

22

Питання: Використання циклів замість селекторів.

Якщо ви виявите, що ви шукаєте метод jQuery '.each' для перебору елементів DOM, запитайте себе, чи можна використовувати селектор для отримання елементів замість цього.

Більше інформації про селектори jQuery:
http://docs.jquery.com/Selectors

Підводний камінь: НЕ використовуючи такий інструмент, як Firebug

Firebug був практично зроблений для подібного налагодження. Якщо ви збираєтесь спілкуватися в DOM з Javascript, вам потрібен хороший інструмент, як Firebug, щоб надати вам видимість.

Більше інформації про Firebug: http://getfirebug.com/

Інші чудові ідеї є в цьому епізоді «Поліморфного подкасту»: (секрети jQuery з Дейвом Уордом) http://polymorphicpodcast.com/shows/jquery/


1
Я робив перший багато разів. Вам просто потрібно пам’ятати, що більшість функцій jQuery працюватимуть на всіх елементах, повернених із селектора.
НезадоволенеЗаключення

Не подобається чесному методу .each
Simon Hayter

14

Нерозуміння використання цього ідентифікатора в потрібному контексті. Наприклад:

$( "#first_element").click( function( event)
{
   $(this).method( ); //referring to first_element
   $(".listOfElements").each( function()
   {
      $(this).someMethod( ); // here 'this' is not referring first_element anymore.
   })
});

І ось один із зразків, як це можна вирішити:

$( "#first_element").click( function( event)
{
   $(this).method( ); //referring to first_element
   var $that = this;
   $(".listOfElements").each( function()
   {
      $that.someMethod( ); // here 'that' is referring to first_element still.
   })
});

1
+1 Більше проблеми з javascript, ніж проблема jquery, але мене це часто породжувало.
mmacaulay

13

Уникайте пошуку декількох DOM кілька разів. Це те, що дійсно може затримати ваш сценарій.

Погано:

$(".aclass").this();
$(".aclass").that();
...

Добре:

$(".aclass").this().that();

Погано:

$("#form .text").this();
$("#form .int").that();
$("#form .choice").method();

Добре:

$("#form")
    .find(".text").this().end()
    .find(".int").that().end()
    .find(".choice").method();

2
$ (". aclass"). this (). that (); це погано! лише селектори для класу повільні
червоний квадрат

Це наочний приклад, що демонструє здатність Jquery використовувати декілька методів на одному виборі. Я зробив вибір простим (і тим самим повільним), щоб приділити більше уваги цій техніці.
googletorp

10
Хоча уникати повторного пошуку DOM - це добре - останній приклад - це нечитабельний безлад, коли я не маю уявлення, що відбувається. Якщо ви плануєте використовувати результат вибору кілька разів, зберігайте його в змінній. Це робить код набагато більш ретельним.
Квентін

12

Завжди кешуйте $ (це) на значущій змінній, особливо в .each ()

Подобається це

$(selector).each(function () {
    var eachOf_X_loop = $(this); 
})

12
Використовуйте $selfабо $thisякщо ви ліниві придумати гарне ім’я змінної.
градбота

10

Схожий на те, що сказав Repo Man, але не зовсім.

Коли я розробляю форми ASP.NET, я часто це роблю

$('<%= Label1.ClientID %>');

забувши знак #. Правильна форма є

$('#<%= Label1.ClientID %>');

10

Події

$("selector").html($("another-selector").html());

не клонує жодної з подій - вам доведеться їх повторно пов’язати.

Згідно з коментарями JP, t - clone () відновлює події, якщо ви передаєте true.


4
Clone () робить, якщо ви передаєте true.
Джеймс

Що про live () у jQuery 1.3.2?
jmav

9

Уникайте багаторазового створення одних і тих же об’єктів jQuery

//Avoid
function someFunc(){
   $(this).fadeIn();
   $(this).fadeIn();
}

//Cache the obj
function someFunc(){
   var $this = $(this).fadeIn();
   $this.fadeIn();
}

var $ this = $ (це) .fadeIn () ;? ви кешуєте ефект?
Джейсон

12
він повертає елемент, його називають ланцюжком!
переосмислити

ви можете встановити змінну і виконати дію над нею одночасно?
Джейсон

1
Дійсно, але не сприймайте моє слово за це. Спробуй це. Як ви вважаєте, що можливе наступне, якщо об’єкт jquery, що представляє елемент, не повернеться? $ ('# divId'). hid (). show (). fadeIn () .... і т. д.
redsquare

14
Це працює, але я вважаю, що це зручніше читати $this = $(this);на окремому рядку. Якщо зможете (не роблячи безладу), забудьте про це $thisі просто $(this).fadeIn().fadeIn();
ланцюгте

8

Я це говорю і для JavaScript, але jQuery, JavaScript ніколи не повинен замінювати CSS.

Крім того, переконайтеся, що сайт є корисним для тих, хто вимкнено JavaScript (не настільки актуальний сьогодні, як у той день, але завжди приємно мати повністю користувальний сайт).


6

Робіть занадто багато маніпуляцій з DOM. У той час як методи .html (), .append (), .prepend () і т. Д. Чудові, через те, як браузери рендерують та повторно рендерують сторінки, їх використання занадто часто спричинить уповільнення. Часто краще створити html як рядок і включити його в DOM один раз, а не змінювати DOM кілька разів.

Замість:

var $parent = $('#parent');
var iterations = 10;

for (var i = 0; i < iterations; i++){
    var $div = $('<div class="foo-' + i + '" />');
    $parent.append($div);
}

Спробуйте це:

var $parent = $('#parent');
var iterations = 10;
var html = '';

for (var i = 0; i < iterations; i++){
    html += '<div class="foo-' + i + '"></div>';
}

$parent.append(html);

Або навіть це ($ wrapper - це нещодавно створений елемент, який ще не був введений до DOM. Додавання вузлів до цього розгортаючого дива не спричиняє уповільнення, і в кінці ми додаємо $ обгортку до $ parent, використовуючи лише одну маніпуляцію DOM ):

var $parent = $('#parent');
var $wrapper = $('<div class="wrapper" />');
var iterations = 10;

for (var i = 0; i < iterations; i++){
    var $div = $('<div class="foo-' + i + '" />');
    $wrapper.append($div);
}

$parent.append($wrapper);

+1 ... Я щоразу використовую .html () для декількох елементів. Помітив, що це все-таки починає гальмувати все!
User2

5

Використання ClientID для отримання "реального" ідентифікатора управління в проектах ASP.NET.

jQuery('#<%=myLabel.ClientID%>');

Крім того, якщо ви використовуєте jQuery всередині SharePoint, ви повинні зателефонувати на jQuery.noConflict ().


11
? Як це підводний камінь? Це рішення для поведінки ASP.NET.
SolutionYogi

1
Так. Це не питання jQuery. Це вина веб-форм asp.net.
redsquare

3
Домовились. Але це те, що ви повинні знати, використовуючи jQuery в ASP.NET незалежно.
Jacobs Data Solutions

2
ОП не згадувало asp.net
redsquare

4

Передача ідентифікаторів замість об’єктів jQuery у функції:

myFunc = function(id) { // wrong!
    var selector = $("#" + id);
    selector.doStuff();
}

myFunc("someId");

Проходження загорнутого набору набагато гнучкіше:

myFunc = function(elements) {
    elements.doStuff();
}

myFunc($("#someId")); // or myFunc($(".someClass")); etc.

3

Надмірне використання ланцюга.

Дивіться це:

this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);

Пояснення


1
Це виглядає смішно, це свого роду затуманення.
Dykam

6
Ланцюжок (самостійно) важко використовувати «в надлишку». Схоже, що цей код надмірно використовує потрійний оператор javascript. Для отримання додаткової інформації див. En.wikipedia.org/wiki/Ternary_operation#JavaScript .
Dan Esparza

3
Я радий, що мені не потрібно підтримувати ваш код.
cdmckay

3

Використовуйте струнний акумулятор

Використовуючи оператор +, нова пам'ять створюється в пам'яті і присвоюється їй об'єднане значення. Тільки після цього результат присвоюється змінній. Щоб уникнути проміжної змінної для результату конкатенації, ви можете безпосередньо призначити результат за допомогою оператора + =. Повільний:

a += 'x' + 'y';

Швидше:

a += 'x';
a += 'y';

Примітивні операції можуть бути швидшими, ніж виклики функцій

Розглянемо можливість використання альтернативних примітивних операцій над викликами функцій у критичних циклах та функціях. Повільний:

var min = Math.min(a, b);
arr.push(val);

Швидше:

var min = a < b ? a : b;
arr[arr.length] = val;

Докладніше читайте на веб-сторінці "Найкращі практики роботи з JavaScript"


1

Якщо ви хочете, щоб користувачі бачили суті html у своєму браузері, використовуйте "html" замість "text", щоб вставити рядок Unicode, наприклад:

$('p').html("Your Unicode string")

1

два мої центи)

Зазвичай робота з jquery означає, що вам не доведеться весь час турбуватися про елементи DOM. Ви можете написати щось подібне - $('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})- і цей код буде виконуватись, не видаючи помилок.

У деяких випадках це корисно, в деяких випадках - зовсім не так, але факт, що jquery, як правило, є приємним для порожніх матчів. І все-таки,replaceWith буде виправлено помилку, якщо спробувати використовувати її з елементом, який не належить до документа. Я вважаю це досить протиінтуїтивним.

Ще одна проблема - на мою думку, порядок вузлів, повернутих методом prevAll () - $('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll(). Насправді це не велика справа, але слід пам’ятати про цей факт.


0

Якщо ви плануєте Ajax у великій кількості даних, наприклад, 1500 рядків таблиці з 20 стовпцями, тоді навіть не думайте використовувати jQuery для вставки цих даних у свій HTML. Використовуйте звичайний JavaScript. jQuery буде занадто повільним на повільних машинах.

Крім того, половина часу jQuery буде робити те, що призведе до того, що це буде повільніше, як, наприклад, намагатись проаналізувати теги скриптів у вхідному HTML-коді та мати справу з примхами браузера. Якщо ви хочете швидкої швидкості вставки, дотримуйтесь простого JavaScript.


1
-1 Функція .html () настільки ж швидка, як і нативний підхід
cllpse

кожен, хто звертається до мене, очевидно, не намагався вставити точку DOM на IE і спостерігати, як все стає повільним. Причина jquery повільна, це не просто вставити dom, він робить кілька інших речей, як-от перевірити, чи dom має сценарії, та виконує їх, якщо його в IE, та інші речі, які вам не потрібно робити, якщо ви точно знаєте які дані ви вставляєте
mkoryak

1
До тих пір, поки вам не потрібно буде турбуватися про витоки браузера і подібне, .innerHTMLбуде робити. Але якщо ви будуєте щось на кшталт Gmail, де користувач протягом годин зберігає вкладку відкритою, вам просто доведеться кусати кулю і боротися із зайвою повільністю. Для допитливих, ось що .html()робить jQuery : james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.html
adamJLev

-1

Використання jQuery в невеликому проекті, який можна виконати лише декількома рядками звичайного JavaScript.


Я не проти того, щоб відмовитися, але, будь ласка, аргументуйте свій вибір.
віс

8
-1 jQuery конспектує зламаний API. Таким чином, ви завжди впевнені, що працює ваш код. Скажімо, ви написали якийсь код за допомогою jQuery, а якусь випадкову помилку браузера представляє нова версія - все, що вам потрібно зробити, це імпортувати оновлену версію фреймворку jQuery. Крім того, потрібно з'ясувати, як вирішити помилку самостійно.
cllpse

+1 здається мені розумним - якщо ви використовуєте лише кілька рядків, має сенс просто використовувати ванільний JS.
alex

1
@roosteronacid, ваш аргумент пропускає суть. Вероятно, браузер не введе регресію в сценарій меншої складності або не вирішить проблеми з перехресними браузерами з цього питання. Два роки тому я працював з mootools і за певних обставин не зміг прочитати вміст елементів на IE. Через кілька годин трингу, щоб вирішити проблему, я просто переписав цю частину з простим js. Таким чином, насправді більш ймовірно, що jQuery вийде з ладу, а не звичайний JavaScript вийшов з ладу через оновлення браузера. Я б вирішив помилку самостійно в будь-який день, а не злом через код бібліотеки.
віс

3
couple of lines of ordinary JavaScriptЗвичайно, без проблем. Але коли це колись просто так? Люди, які говорять "чому б не використовувати ванільний javascript ??" ще недостатньо сильно покусав IE ... і не кажучи вже про те, скільки грубого і кодового коду потрібно написати, щоб робити прості речі в звичайному старому JS.
adamJLev

-3

Не розуміючи прив'язки подій. JavaScript і jQuery працюють по-різному.

За популярним попитом, приклад:

У jQuery:

$("#someLink").click(function(){//do something});

Без jQuery:

<a id="someLink" href="page.html" onClick="SomeClickFunction(this)">Link</a>
<script type="text/javascript">
SomeClickFunction(item){
    //do something
}
</script>

В основному гачки, необхідні для JavaScript, більше не потрібні. Тобто використовувати вбудовану розмітку (onClick тощо), тому що ви можете просто використовувати ідентифікатори та класи, які розробник зазвичай використовує для цілей CSS.


5
Хочете допрацювати? Переважно приклад?
РішенняYogi

7
Чи не надає JavaScript addEventListener () та attachEvent () для цього?
алекс

2
розлука проблем, людина. Тримайте свій HTML та JS окремо
Дон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.