Pergunta

jQuery hiperlinks -? Valor href texto ] [1]

Eu estou correndo em um problema com jQuery e um evento de clique anexado a um elemento âncora. [1]: jQuery hiperlinks - valor href "Este" questão SO parece ser uma duplicata e a resposta aceita não parece resolver o problema. Desculpe se isso é má etiqueta SO.

Na minha função .ready () eu tenho:

jQuery("#id_of_anchor").click(function(event) { //start function when any update link is clicked
        Function_that_does_ajax();
        });

e minha âncora esta aparência:

<a href="#" id="id_of_anchor"> link text </a> 

mas quando o link é clicado, a função de ajax é realizada como desejado, mas os pergaminhos do navegador para o topo da página. não é bom.

Eu tentei adicionar:

event.preventDefault(); 

antes de chamar a minha função que faz o ajax, mas isso não ajuda. O que eu estou ausente?

Clarificação

Eu usei todas as combinações de

return false;
event.preventDefault(); 
event.stopPropagation();

antes e depois da minha chamada para o meu js função ajax. Ele ainda rola para o topo.

Foi útil?

Solução

Isso deve funcionar, você pode esclarecer o que você quer dizer com "antes"? Você está fazendo isso?

jQuery("#id_of_anchor").click(function(event) {
    event.preventDefault();
    Function_that_does_ajax();
});

Porque que deve trabalho no sentido de que se ele não está funcionando, você está fazendo algo errado e nós precisamos ver mais código. No entanto, por uma questão de exaustividade, você também pode tentar o seguinte:

jQuery("#id_of_anchor").click(function() {
    Function_that_does_ajax();
    return false;
});

Editar

Aqui está um exemplo desta trabalho.

Os dois links usar este código:

$('#test').click(function(event) {
    event.preventDefault();
    $(this).html('and I didnt scroll to the top!');
});

$('#test2').click(function(event) {
    $(this).html('and I didnt scroll to the top!');
    return false;
});

E como você pode ver que eles estão trabalhando muito bem.

Outras dicas

Você pode usar javascript: void (0); na propriedade href.

Como Tilal disse acima:

<a id="id_of_anchor" href="javascript:void(0)" />

mantém a marca de âncora olhando bem, permite manipuladores Clique em Atribuir a ele com javascript, e não rola. Vamos utilizá-lo extensivamente apenas por este motivo.

Esta questão é mais de um exercício de depuração, uma vez que é indicado que você está usando as funções corretas do jQuery Evento objeto .

Em um manipulador de eventos jQuery, você pode fazer qualquer um, ou ambos, de duas coisas básicas:

1. Impedir o comportamento padrão do elemento (à href = "#", no seu caso):

jQuery("#id_of_anchor").click(function(evt) { 
  // ...
  evt.preventDefault(); // assuming your handler has "evt" as the first parameter
  return false;
}

2. Parar o evento se propague para manipuladores de eventos sobre os elementos HTML circundantes:

jQuery("#id_of_anchor").click(function(evt) { 
  // ...
  evt.stopPropagation(); // assuming your handler has "evt" as the first parameter
}

Uma vez que você não está recebendo o comportamento esperado, você deve tirar a chamada ajax temporariamente, substitua-o com algum código inócuo como definir um valor de formulário, ou -shudder- alert ( "OK") e teste se você ainda rolagem para cima.

$("#id_of_anchor").click(function(event) { 
  // ...
  return false;
}

apenas perder o

href="#"

Na marca um html ... Isso é o que causam a página da web para "saltar para cima".

<a id="id_of_anchor"> link text </a>

e lembre-se de adicionar

cursor: pointer;

para css do seu um assim ele vai olhar como um link em mouseover.

Boa sorte.

Eu tenho tido o mesmo problema.

Eu acho que ocorre quando você ligar o evento antes de acrescentar o elemento ao DOM.

Ele me ajudou muito com o código abaixo. Obrigado!

        $(document).ready(function() {
        $(".dropdown dt a").click(function(event) {
        event.preventDefault();
            $(".dropdown dd ul").toggle('slow');
        });           
        $(".dropdown dd ul li a").click(function(event) {
        event.preventDefault();
            $(".dropdown dd ul").hide();
        });
    });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top