Pergunta

Eu tenho um div que é retornado de uma chamada de ajax que contém uma a. Eu preciso clicar nele em javascript, mas não consigo encontrar uma maneira que funciona em ambos IE6 e FF.

Isso funciona no FF, mas gera um objeto necessário erro no IE6:

$('#mylink').click();

Isso funciona no IE6, mas gera um $ ( "# mylink"). Get (0) .click não é uma função erro no FF.

$('#mylink').get(0).click();

Todas as ideias sobre por que isso é e que tipo de solução está disponível?

EDIT:

Usando o gatilho retorna o mesmo erro como clicar no IE6:

$('#mylink').trigger('click');

EDIT:

Colocar o código em um temporizador não altera o comportamento:

 setTimeout(function() {
  $('#mylink').click();
 }, 100);

EDIT:

Como alternativa, isso funciona. Mas seria bom para entender melhor a questão. Esta não é uma questão jQuery sozinho (ou talvez em tudo). O erro IE6 JavaScript sai MicrosoftAjax.js por isso tem algo a ver com isso.

 var anchor = $('#mylink');
 if (anchor.get(0).click) {
  anchor.get(0).click();
 }
 else {
  anchor.click();
 }
Foi útil?

Solução

Se $ ( "# mylink"). Click () não é encontrado, mas $ ( "# mylink"). Get (0) .click () é, em seguida, você poderia usar isso como base para um teste?

ex

if ($("#mylink").click)
{
    $("#mylink").click()
}
elseif ($("#mylink").get(0))
{
    $("#mylink").get(0).click();
}

longe do ideal eu sei, mas esse é o caminho das coisas quando se lida com IE6

Outras dicas

O método get retorna o elemento DOM. Você deve usar eq vez.

$('#mylink').eq(0).click();

Que tal usar um gatilho ?

$("#mylink").trigger('click');

Tente:

$('#mylink').trigger('click');

deve ser o mesmo que o primeiro exemplo, embora ... Faça alguns alertas no IE para garantir que o elemento existe e tudo o que (talvez você tenha um lugar ID duplicado ou algo assim?).

O objeto necessário é provavelmente gerado porque o IE não consegue encontrar o seletor #mylink no tempo. Certifique-se de fazer a chamada na função de sucesso de retorno de chamada ou fornecer uma função de tempo limite que verifica se o elemento está disponível antes de disparar o clique:

window.setTimeout(function() {
    if ($("#mylink").length) {
        $("#mylink").trigger('click');
        return false;
    }
    window.setTimeout(arguments.callee, 1);
},1);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top