Нажатие тега в IE6 и FF с помощью jQuery - PullRequest
1 голос
/ 04 января 2010

У меня есть div, который возвращается из вызова ajax, который содержит a. Мне нужно щелкнуть его в javascript, однако я не могу найти способ, который работает как в IE6, так и в FF.

Это работает в FF, но генерирует требуемый объект ошибка в IE6:

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

Это работает в IE6, но генерирует $ ("# mylink"). Get (0) .click не является функцией Ошибка в FF.

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

Любые идеи о том, почему это так и какое решение доступно?

EDIT:

Использование триггера возвращает ту же ошибку, что и щелчок в IE6:

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

РЕДАКТИРОВАТЬ:

Размещение кода в таймере не меняет поведение:

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

EDIT:

В качестве обходного пути это работает. Но было бы неплохо лучше понять проблему. Это не одна проблема jQuery (или, может быть, вообще). Ошибка IE6 JavaScript возникает из-за MicrosoftAjax.js, поэтому она как-то связана с этим.

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

Ответы [ 5 ]

1 голос
/ 04 января 2010

Метод get возвращает элемент DOM. Вместо этого вы должны использовать eq.

$('#mylink').eq(0).click();
0 голосов
/ 04 января 2010

Если $ ("# mylink"). Click () не найден, но $ ("# mylink"). Get (0) .click () есть, то можете ли вы использовать это в качестве основы для теста?

например

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

Я далек от идеала, я знаю, но так обстоит дело с IE6

0 голосов
/ 04 января 2010

Требуемый объект , вероятно, сгенерирован, потому что IE не может найти селектор #mylink во времени. Убедитесь, что вы выполняете вызов в функции обратного вызова Success или предоставляете функцию тайм-аута, которая проверяет, доступен ли элемент, прежде чем инициировать щелчок:

window.setTimeout(function() {
    if ($("#mylink").length) {
        $("#mylink").trigger('click');
        return false;
    }
    window.setTimeout(arguments.callee, 1);
},1);
0 голосов
/ 04 января 2010

Попробуйте:

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

Должно ли быть таким же, как ваш первый пример, хотя ... Сделайте несколько предупреждений в IE, чтобы убедиться, что элемент существует и все такое (возможно, у вас есть дублированный идентификатор где-то или что-то?).

0 голосов
/ 04 января 2010

Как насчет использования триггера ?

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