Clicando em um tag no IE6 e FF usando jQuery
-
18-09-2019 - |
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();
}
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);