1

我有一个div从包含a. 我需要在 javascript 中单击它,但是我找不到在 IE6 和 FF 中都可以使用的方法。

这在 FF 中有效,但在 IE6 中会生成object required错误:

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

这在 IE6 中有效,但在 FF 中生成$("#mylink").get(0).click is not a function错误。

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

关于为什么会这样以及有什么样的解决方案可用的任何想法?

编辑:

在 IE6 中使用 trigger 返回与 click 相同的错误:

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

编辑:

将代码放在计时器中不会改变行为:

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

编辑:

作为一种解决方法,此功能起作用。但最好能更好地理解这个问题。这不仅仅是一个 jQuery 问题(或者可能根本不是问题)。IE6 JavaScript 错误来自 MicrosoftAjax.js,因此与此有关。

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

5 回答 5

1

get 方法返回 DOM 元素。你应该使用 eq 代替。

$('#mylink').eq(0).click();
于 2010-01-04T16:31:39.893 回答
0

使用触发器怎么样?

$("#mylink").trigger('click');
于 2010-01-04T16:31:13.777 回答
0

尝试:

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

不过,应该与您的第一个示例相同...在 IE 中执行一些警报以确保元素存在以及所有这些(也许您在某处有重复的 ID 或其他东西?)。

于 2010-01-04T16:32:12.847 回答
0

需要的对象很可能是因为 IE 无法及时找到#mylink选择器而生成的。确保在成功回调函数中进行调用或提供超时函数以在触发点击之前检查元素是否可用:

window.setTimeout(function() {
    if ($("#mylink").length) {
        $("#mylink").trigger('click');
        return false;
    }
    window.setTimeout(arguments.callee, 1);
},1);
于 2010-01-04T16:41:33.203 回答
0

如果 $("#mylink").click() 没有找到但 $("#mylink").get(0).click() 找到了,那么你能用它作为测试的基础吗?

例如

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

我知道远非理想,但这就是处理 IE6 时的方式

于 2010-01-04T17:52:52.430 回答