Множество функций в jquery .live

#jquery

#jquery

Вопрос:

Мне интересно, возможно ли привязать несколько функций к одному событию в реальном времени.

 $('.block a.submit').live("click",
    function(){
        $(this).text('Save').parent().each(function(){
            $(".value", this).hide();
            $(".edit", this).show();
            $(this).find('.edit :first').focus(); //focuses on first form element - less clicks
            $('thead').show();
        });
    },
    function(){
        $(this).text('Edit').parent().each(function(){
            $(".edit", this).hide();
            $(".value", this).show();
            $('thead').hide();
        });
    }
);
  

Комментарии:

1. если события live не было, click но было hover , это было бы допустимо

2. @Нил, нет, этого не будет. .live() Метод принимает один метод для привязки к событию. Для hover события это просто привязало бы один метод, предоставленный для обоих mouseenter и mouseleave .

Ответ №1:

я не уверен, что вы хотите сделать, но да, вы можете, просто разделите это на две части:

 $('.block a.submit').live("click",
    function(){
        $(this).text('Save').parent().each(function(){
            $(".value", this).hide();
            $(".edit", this).show();
            $(this).find('.edit :first').focus(); //focuses on first form element - less clicks
            $('thead').show();
        });
    }).live('click',
    function(){
        $(this).text('Edit').parent().each(function(){
            $(".edit", this).hide();
            $(".value", this).show();
            $('thead').hide();
        });
    }
);
  

или вы можете поместить обе вещи, которые вы хотите сделать, в одну функцию:

 $('.block a.submit').live("click",
    function(){
        $(this).text('Save').parent().each(function(){
            $(".value", this).hide();
            $(".edit", this).show();
            $(this).find('.edit :first').focus(); //focuses on first form element - less clicks
            $('thead').show();
        });
        //second thing
        $(this).text('Edit').parent().each(function(){
            $(".edit", this).hide();
            $(".value", this).show();
            $('thead').hide();
        });
    }
);
  

Ответ №2:

Нет, но вы можете объединить свои методы в один

 $('.block a.submit').live("click",
    function(){
        $(this).text('Save').parent().each(function(){
            $(".value", this).hide();
            $(".edit", this).show();
            $(this).find('.edit :first').focus(); //focuses on first form element - less clicks
            $('thead').show();
        });

        $(this).text('Edit').parent().each(function(){
            $(".edit", this).hide();
            $(".value", this).show();
            $('thead').hide();
        });
    }
);
  

Ответ №3:

     $('.block a.submit').live("click","keydown","keyup",
       function(){
  

Я верю в это.

Комментарии:

1. Это неправильный синтаксис ( должен быть .live('click keydown keyup') ), но концепция, о которой вы говорите, заключается в привязке одного метода к нескольким событиям. Операционная система запрашивает несколько методов для одного события.

Ответ №4:

Просто удалите вторую function() {

Почему вы хотите ограничить количество инструкций в одной анонимной функции?

Ответ №5:

Да, но я не думаю, что вам нужно проводить здесь живые события

Текущие события необходимы только в том случае, если вы вводите элементы в dom и хотите, чтобы ваши существующие события автоматически подключались к новым элементам..

В любом случае и bind, и live будут работать с несколькими слушателями.

 $('.block a.submit').bind("click",
      function(){
          $(this).text('Save').parent().each(function(){
              $(".value", this).hide();
              $(".edit", this).show();
              $(this).find('.edit :first').focus(); //focuses on first form element - less clicks
              $('thead').show();
          });
      }).bind("click",
      function(){
          $(this).text('Edit').parent().each(function(){
              $(".edit", this).hide();
              $(".value", this).show();
              $('thead').hide();
          });
      }
);