Как запустить функцию в jquery

Я новичок в программировании, и я не могу понять, как сохранить функцию в JQuery и запустить в ней несколько мест.

У меня есть:

$(function () {
  $("div.class").click(function(){
    //Doo something

  });

  $("div.secondclass").click(function(){
    //Doo something
  });

});

Теперь 2 "//Doo somethings" совпадают, и я не хочу снова писать тот же код.

Если я поставлю:

$(function () {

  function doosomething ()
  {
    //Doo something
  }

  $("div.class").click(doosomething);

  $("div.secondclass").click(doosomething);

});

Это приведет к запуску функции при загрузке страницы, а не только при нажатии.

Как это сделать правильно?

Спасибо!

Ответ 1

Следующее должно работать хорошо.

$(function() {

  // Way 1
  function doosomething()
  {
    //Doo something
  }

  // Way 2, equivalent to Way 1
  var doosomething = function() {
    // Doo something
  }

  $("div.class").click(doosomething);

  $("div.secondclass").click(doosomething);

});

В принципе, вы объявляете свою функцию в той же области, в которой вы ее используете (JavaScript использует Closures для определения области).

Теперь, поскольку функции в JavaScript ведут себя как любой другой объект, вы можете просто назначить doosomething как функцию для вызова по клику с помощью .click(doosomething);

Ваша функция не будет выполняться до тех пор, пока вы ее не назовете с помощью doosomething() (doosomething без () ссылается на функцию, но не вызывает ее) или вызовет другую функцию (в этом случае click обработчик).

Ответ 2

Я бы сделал это следующим образом:

(function($) {
jQuery.fn.doSomething = function() {
   return this.each(function() {
      var $this = $(this);

      $this.click(function(event) {
         event.preventDefault();
         // Your function goes here
      });
   });
};
})(jQuery);

Затем на готовом документе вы можете сделать следующее:

$(document).ready(function() {
   $('#div1').doSomething();
   $('#div2').doSomething();
});

Ответ 3

function doosomething ()
{
  //Doo something
}


$(function () {


  $("div.class").click(doosomething);

  $("div.secondclass").click(doosomething);

});

Ответ 4

В качестве альтернативы (я бы сказал, желательно) вы можете сделать это следующим образом:

$(function () {
  $("div.class, div.secondclass").click(function(){
    //Doo something
  });
});

Ответ 5

Вы также можете это сделать. Поскольку вы хотите, чтобы одна функция использовалась повсюду, вы можете сделать это, вызвав JqueryObject.function(). Например, если вы хотите создать свою собственную функцию для управления любым CSS для элемента:

jQuery.fn.doSomething = function () {
   this.css("position","absolute");
   return this;
}

И способ называть его:

$("#someRandomDiv").doSomething();

Ответ 6

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

Простейшее перемещение doosomething() вне $(function(){} приведет к тому, что оно будет иметь глобальную область видимости и сохранит код простым/удобочитаемым.