17/01
2010

Se você é fresco como eu ou como a Dani Murai e gosta de codificar suas páginas utilizando doctype strict já sabe que target=”_blank” não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de UX deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos clientes não entendem as implicações de forçar este tipo de prática guela abaixo do usuáro, e você é fresco e continua querendo usar strict, a solução é JavaScript:

1
2
3
4
5
$('a').click(function(){
    var href = $(this).attr('href');
    window.open(href);
    return false;
});

Este exemplo em jQuery, se executado, fará com que todos os links desta página sejam abertos em uma nova guia. O return false na linha 4 serve para barrar o evento padrão do link. Se o return for omitido, o destino do link vai ser aberto em uma nova guia e também na página atual.

preventDefault: uma alternativa mais elegante

Descobri recentemente o método preventDefault que acaba sendo muito mais prático e menos sujo do que o return false:

1
2
3
4
5
$('a').click(function(event){
    event.preventDefault();
    var href = $(this).attr('href');
    window.open(href);
});

Além de fazer muito mais sentido do que o return, preventDefault pode ser colocado em qualquer parte do evento, não interrompendo o fluxo da função.

3 comentários até agora

Comente!
  1. O ideal é usar $(‘a[rel=external]‘), mas acho que doctype strict já tá meio “vintage”, a tendencia agora é HTML5 :D

  2. É verdade, rel=”external” fica melhor do que a solução que eu dei outro dia: class=”_blank” (nem um pouco semântica).

    É, o HTML5! Coitado, o strict nem chegou a ter seu momento de glória.

    Valeu! ;)

  3. usei bastante o event.preventDefault(); não manjava esse…ele é ideal para quando vc está usando a função click de um li por exemplo e quer desabilitar o a que está dentro dela…

    E HTML5 mesmo só a Dine que ta usando…com os clientes com ie6 não da nem pra aprender essa porra…hehehe

Get Adobe Flash playerPlugin by wpburn.com wordpress themes