Значок изменения jQuery на клике [дубликат]

Я начал эту проблему в понедельник 2018-06-04. Наши тесты проводятся каждый будний день. Похоже, что единственное, что изменилось, это версия google-chrome (которая была обновлена ​​до текущей). JVM и Selenium были последними версиями на Linux-боксе (Java 1.8.0_151, selenium 3.12.0, google-chrome 67.0.3396.62 и Xvfb перспектива). В частности, добавление аргументов «--no-sandbox» и «--disable-dev-shm-usage» остановило ошибку. Я рассмотрю эти проблемы, чтобы найти дополнительную информацию об эффекте и другие вопросы, как в том, что вызвало обновление google-chrome.

ChromeOptions options = new ChromeOptions();
        ...
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
437
задан KShirish 6 April 2016 в 03:15
поделиться

10 ответов

Я думаю, разница в шаблонах использования.

Я предпочел бы .on над .click, потому что предыдущий может использовать меньше памяти и работать для динамически добавленных элементов.

Рассмотрим следующий html:

<html>
    <button id="add">Add new</button>
    <div id="container">
        <button class="alert">alert!</button>
    </div>
</html>

, где мы добавляем новые кнопки через

$("button#add").click(function() {
    var html = "<button class='alert'>Alert!</button>";
    $("button.alert:last").parent().append(html);
});

и хотим «Alert!» чтобы показать предупреждение. Для этого мы можем использовать «щелчок» или «вкл».


Когда мы используем click

$("button.alert").click(function() {
    alert(1);
});

с указанным выше, обработчик раздельный создается для каждого отдельного элемента , который соответствует селектору. Это означает, что

  1. многие совпадающие элементы создавали бы много одинаковых обработчиков и, таким образом, увеличивали размер памяти
  2. , динамически добавленные элементы не будут иметь обработчик, т. Е. В приведенном выше html новом добавлено "Alert!" кнопки не будут работать, если вы не переустановите обработчик.

Когда мы используем .on

$("div#container").on('click', 'button.alert', function() {
    alert(1);
});

с указанным выше, single для всех элементов , которые соответствуют вашему селектору, включая динамически созданные.


... еще одна причина использования .on

Как прокомментировал Adrien ниже, другой причиной использования .on являются события с именами.

Если вы добавили обработчик с .on("click", handler), вы обычно удаляете его с помощью .off("click", handler), который удалит этот обработчик. Очевидно, что это работает, только если у вас есть ссылка на функцию, так что, если вы этого не сделаете? Вы используете пространства имен:

$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });

с отключением через

$("#element").off("click.someNamespace");
645
ответ дан andreister 31 August 2018 в 17:19
поделиться

Что касается ilearned из Интернета и некоторых друзей .on () используется, когда вы динамически добавляете элементы. Но когда я использовал его на простой странице входа, где событие click должно отправить AJAX на node.js, а при возврате добавить новые элементы, он начал вызывать вызовы с несколькими AJAX. Когда я изменил его, нажмите () все пошло правильно. На самом деле я не сталкивался с этой проблемой раньше.

0
ответ дан Alper Bilgil 31 August 2018 в 17:19
поделиться

Они выглядят одинаково ... Документация из функции click () :

Этот метод является ярлыком для .bind ('click', обработчик)

Документация из функции on () :

Как и в jQuery 1.7, метод .on () обеспечивает все функции, необходимые для прикрепления обработчиков событий. Для получения помощи в преобразовании из старых методов событий jQuery см. .Bind (), .delegate () и .live (). Чтобы удалить события, связанные с .on (), см. .Off ().

7
ответ дан dana 31 August 2018 в 17:19
поделиться

$ ('. UPDATE'). click (function () {}); V / S $ (document) .on ('click', '. UPDATE', function () {});

[введите описание изображения здесь] [10]

0
ответ дан Devang Hire 31 August 2018 в 17:19
поделиться

Есть ли разница между следующим кодом?

Нет, нет функциональной разницы между двумя примерами кода в вашем вопросе. .click(fn) - это «метод быстрого доступа» для .on("click", fn). Из документация для .on() :

Существуют короткие методы для некоторых событий, таких как .click() , которые можно использовать для присоединения или обработчиков событий триггера.

Обратите внимание, что .on() отличается от .click() тем, что имеет возможность создавать делегированных обработчиков событий , передав параметр selector, тогда как .click() этого не делает. Когда .on() вызывается без параметра selector, он ведет себя точно так же, как .click(). Если вы хотите делегировать событие, используйте .on().

31
ответ дан gilly3 31 August 2018 в 17:19
поделиться

.on() - рекомендуемый способ выполнения всех привязок событий к jQuery 1.7. Он переводит все функции как .bind(), так и .live() в одну функцию, которая изменяет поведение, когда вы передаете ему разные параметры.

Как вы написали свой пример, между ними нет никакой разницы. Оба привязывают обработчик к событию click в #whatever. on() предлагает дополнительную гибкость, позволяя вам делегировать события, запущенные детьми из #whatever, в одну функцию обработчика, если вы выберете.

// Bind to all links inside #whatever, even new ones created later.
$('#whatever').on('click', 'a', function() { ... });
20
ответ дан Interrobang 31 August 2018 в 17:19
поделиться

Здесь вы получите список различных способов применения события click. Вы можете выбрать соответственно подходящий или если вы нажмете не работает, попробуйте альтернативу из них.

$('.clickHere').click(function(){ 
     // this is flat click. this event will be attatched 
     //to element if element is available in 
     //dom at the time when JS loaded. 

  // do your stuff
});

$('.clickHere').on('click', function(){ 
    // same as first one

    // do your stuff
})

$(document).on('click', '.clickHere', function(){
          // this is diffrent type 
          //  of click. The click will be registered on document when JS 
          //  loaded and will delegate to the '.clickHere ' element. This is 
          //  called event delegation 
   // do your stuff
});

$('body').on('click', '.clickHere', function(){
   // This is same as 3rd 
   // point. Here we used body instead of document/

   // do your stuff
});

$('.clickHere').off().on('click', function(){ // 
    // deregister event listener if any and register the event again. This 
    // prevents the duplicate event resistration on same element. 
    // do your stuff
})
1
ответ дан Must keem 31 August 2018 в 17:19
поделиться

Как уже упоминалось в других ответах:

$("#whatever").click(function(){ });
// is just a shortcut for
$("#whatever").on("click", function(){ })

Отметив, что .on() поддерживает несколько других комбинаций параметров, которые .click() не позволяет, обрабатывая делегирование событий (superceding .delegate() и .live()).

(И, очевидно, существуют другие подобные методы быстрого доступа для «keyup», «focus» и т. д.)

Причина, по которой я отправляю дополнительный ответ это означает, что если вы вызываете .click() без параметров:

$("#whatever").click();
// is a shortcut for
$("#whatever").trigger("click");

Отметив, что если вы используете .trigger() напрямую, вы также можете передать дополнительные параметры или объект события jQuery, .click().

Я также хотел упомянуть, что если вы посмотрите на исходный код jQuery (в jquery-1.7.1.js), вы увидите, что внутри .click() (или .keyup() и т. д.) фактически вызовет .on() или .trigger(). Очевидно, это означает, что вы можете быть уверены, что у них действительно есть тот же результат, но это также означает, что использование .click() имеет немного меньшие накладные расходы - ничто не беспокоится или даже не думает об этом в большинстве случаев, но теоретически это может иметь значение в чрезвычайные обстоятельства.

EDIT: Наконец, обратите внимание, что .on() позволяет связать несколько событий с одной и той же функцией в одной строке, например:

$("#whatever").on("click keypress focus", function(){});
15
ответ дан nnnnnn 31 August 2018 в 17:19
поделиться

Нет, нет. Точка on() - это другие ее перегрузки и возможность обрабатывать события, которые не имеют методов быстрого доступа.

8
ответ дан SLaks 31 August 2018 в 17:19
поделиться

.click события работают только тогда, когда элемент получает визуализацию и прикрепляются только к элементам, загружаемым, когда DOM готов.

.on события динамически привязаны к элементам DOM, что полезно, когда вы хотите для присоединения события к элементам DOM, которые отображаются в запросе ajax или что-то еще (после того, как DOM готов).

4
ответ дан Tushar 31 August 2018 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: