.delegate () vs .on ()

Estou usando o jQuery no meu aplicativo da web. Eu tenho usado o .bind() mas vejo que é um pouco lento, por isso, ao ler a documentação, eu li sobre .on() e .delegate() . Eu entendo como .delegate() o .delegate() mas não estou claro sobre qual é a diferença entre ele e .on() ou qual é melhor em quais cenários.

Também estou usando o jQuery 1.6, então gostaria de saber se vale a pena preparar meu script para o jQuery 1.7 colocando uma condição semelhante à seguinte:

 if(typeof $(selector).on == 'function'){ /* use .on() */ }else{ /* use .delegate() */ } 

É uma boa ideia (preparar-se para .on() ) ou apenas procurar problemas por nada?

Por favor, ajude-me a entender melhor esses methods.

A syntax .on() é a nova syntax que a versão 1.7 usa e destina-se a replace .bind() , .delegate() e .live() .

Mais aqui -> http://blog.jquery.com/2011/11/03/jquery-1-7-released/

Novas APIs de Eventos: .on () e .off ()

As novas APIs .on () e .off () unificam todas as formas de append events a um documento no jQuery – e são mais curtos para digitar!

  $(elements).on( events [, selector] [, data] , handler ); $(elements).off( [ events ] [, selector] [, handler] ); 

Quando um seletor é fornecido, .on () é semelhante a .delegate (), pois ele anexa um manipulador de events delegado, filtrado pelo seletor. Quando o seletor é omitido ou nulo, a chamada é como .bind (). Há um caso ambíguo: se o argumento data for uma string, você deverá fornecer uma string de seletor ou null para que os dados não sejam confundidos como um seletor. Passe um object para dados e você nunca terá que se preocupar com casos especiais.

Todos os methods de vinculação de events existentes (e seus methods de vinculação correspondentes) ainda estão lá em 1.7, mas recomendamos que você use .on () para qualquer novo projeto do jQuery em que você saiba que a versão 1.7 ou superior está em uso. (ênfase minha)

Recentemente, respondi a uma pergunta relacionada sobre esse mesmo tópico.

A parte importante é:

A nova function on docs é usada para replace os methods separados existentes de events de associação:

Os events existentes continuam a existir e são simplesmente aliases de on. Não há nenhum relatório oficial para sugerir que eles serão removidos, então você estaria seguro para continuar a usá-los se você os entender melhor.

Delegar:

 $(selector).delegate(subselector, events, data, handler); $(selector).on(events, subselector, data, handler); 

Fonte:

 delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn ); } 

tl; dr

Se você quer compatibilidade com versões anteriores, continue usando docs .delegate() , se seu código depender dos resources mais recentes do jQuery, sinta-se à vontade para usá on .

Da API:

“A partir do jQuery 1.7, .delegate () foi substituído pelo método .on ().”

“A partir do jQuery 1.7, o método .on () fornece toda a funcionalidade necessária para append manipuladores de events.”

Considere o uso de find () em vez de delegates de events. Veja este teste de desempenho: http://jsperf.com/jquery-event-delegation/85

Ao invés de

 $("#mydomid").on("click", ".somechildclass", delegate); 

usar

 $("#mydomid").find(".somechildclass").on("click", delegate); 

se você passar pelo jQuery Api, encontrará o mesmo. consulte Mais informação

Por exemplo, o seguinte código .delegate ():

$ (“table”). delegate (“td”, “click”, function () {
$ (this) .toggleClass (“escolhido”); });

é equivalente ao seguinte código escrito usando .on ():

$ (“table”). on (“clique”, “td”, function () {
$ (this) .toggleClass (“escolhido”); });

.delegate() é equivalente a .on() : https://github.com/jquery/jquery/blob/bd9a138/src/event/alias.js#L31-33

.on() é preferível porque é mais curto e tem uma ordem de parâmetros melhor.