повторное использование кода при привязке к щелчку

#javascript #jquery

#javascript #jquery

Вопрос:

Учитывая следующее:

   $(document).ready(function() {

    $('a.went-cold-turkey').click(function() {
      $("body").css("cursor", "progress");
      var activity_day = this.rel;
      $.ajax({
          url: this.href,
          type: "GET",
          cache: false,
          success: function (html) {
            $('#' activity_day).replaceWith(html);
            $("body").css("cursor", "auto");
          }
      });
      return false;
    });

    $('a.did-it-once').click(function() {
      $("body").css("cursor", "progress");
      var activity_day = this.rel;
      $.ajax({
          url: this.href,
          type: "GET",
          cache: false,
          success: function (html) {
            $('#' activity_day).replaceWith(html);
            $("body").css("cursor", "auto");
          }
      });
      return false;
    });

  });
  

Как вы можете видеть, оба вызова «.click» практически идентичны. Как я могу поделиться повторяющимся кодом в обоих, чтобы все оставалось СУХИМ?

Ответ №1:

Вы можете передать несколько селекторов в $ functin jQuery следующим образом:

 $('a.went-cold-turkey, a.did-it-once').click(function () {});
  

В качестве альтернативы, вы могли бы поместить свой повторяющийся код в именованную функцию и передать ее в качестве обработчика:

 function handleEvent() {
    // Your code here
}

$('a.went-cold-turkey').click(handleEvent);
  

Ответ №2:

Вы можете либо

Привязка с помощью функции

 function functionName(){}
$("selector1").click(functionName)
$("selector2").click(functionName)
  

Или привязка с обоими селекторами при одном поиске

 $("selector1, selector2").click(function(){});
  

Ответ №3:

РЕДАКТИРОВАТЬ: на 2-м этапе просто сделайте это:

 $(document).ready(function() {

    $('a.went-cold-turkey,a.did-it-once').click(function() {
      $("body").css("cursor", "progress");
      var activity_day = this.rel;
      $.ajax({
          url: this.href,
          type: "GET",
          cache: false,
          success: function (html) {
            $('#' activity_day).replaceWith(html);
            $("body").css("cursor", "auto");
          }
      });
      return false;
    });

  });
  

Ответ №4:

Предположим, что эти два элемента A находятся в родительском элементе с классом «choices».

 $('.choices a').click(function() {
  $("body").css("cursor", "progress");
  var activity_day = this.rel;
  $.ajax({
      url: this.href,
      type: "GET",
      cache: false,
      success: function (html) {
        $('#' activity_day).replaceWith(html);
        $("body").css("cursor", "auto");
      }
  });
  return false;
});
  

Ответ №5:

Это должно быть примерно то, что вы ищете:

 $(document).ready(function() {
var common = function(rel, href) {
    $("body").css("cursor", "progress");
    var activity_day = rel;
    $.ajax({
        url: thref,
        type: "GET",
        cache: false,
        success: function (html) {
            $('#' activity_day).replaceWith(html);
            $("body").css("cursor", "auto");
        }
    });
    return false;
}
$('a.went-cold-turkey').click(function() {
    return common(this.rel, this.href);
});

$('a.did-it-once').click(function() {
    return common(this.rel, this.href);
});
});
  

Ответ №6:

Поместите код в функцию, а затем просто добавьте один и тот же обработчик щелчка к обоим элементам.

 $(function(){

   function clickFn(){

     $("body").css("cursor", "progress");
     var activity_day = this.rel;
     $.ajax({
       url: this.href,
       type: "GET",
       cache: false,
       success: function (html) {
        $('#' activity_day).replaceWith(html);
        $("body").css("cursor", "auto");
       }
     });
     return false;

   }

   $('a.went-cold-turkey, a.did-it-once').click( clickFn );

});
  

Ответ №7:

http://api.jquery.com/multiple-selector/

 $('a.went-cold-turkey, a.did-it-once').click(function() {
  $("body").css("cursor", "progress");
  var activity_day = this.rel;
  $.ajax({
      url: this.href,
      type: "GET",
      cache: false,
      success: function (html) {
        $('#' activity_day).replaceWith(html);
        $("body").css("cursor", "auto");
      }
  });
  return false;
});
  

Ответ №8:

Поскольку это:

 function linkClick() {
  $("body").css("cursor", "progress");
  var activity_day = this.rel;
  $.ajax({
      url: this.href,
      type: "GET",
      cache: false,
      success: function (html) {
        $('#' activity_day).replaceWith(html);
        $("body").css("cursor", "auto");
      }
  });
  return false;
}

$(document).ready(function(){
  $('a.went-cold-turkey, a.did-it-once').click(linkClick);
});
  

Ответ №9:

Поместите оба селектора в функцию:

   $(document).ready(function() {

    $('a.went-cold-turkey, a.did-it-once').click(function() {
      $("body").css("cursor", "progress");
      var activity_day = this.rel;
      $.ajax({
          url: this.href,
          type: "GET",
          cache: false,
          success: function (html) {
            $('#' activity_day).replaceWith(html);
            $("body").css("cursor", "auto");
          }
      });
      return false;
    });


  });