JavaScript无法执行onclick事件。

4

我有一些简单的JavaScript函数:

function focus(id)
{
    var e = document.getElementById(id);
    if (e != null)
    {
        e.focus();
    }
}

function show(id)
{
    var e = document.getElementById(id);
    if (e != null)
    {
        e.style.display = "inline";
    }
}

我接下来有一个带有 onclick 事件的 html 标签:<a>
<a title="Click This" onclick="focus('some_textbox'); show('some_panel');">Click This</a>

当我点击“Click This”链接时,只有show()方法被执行。出于某种原因,焦点方法从未被调用。你有什么想法吗?
我已经尝试清除缓存并颠倒focus()show()方法的顺序。我还验证了所有拼写是否正确。
是因为在JavaScript中focus()已经是一个函数吗?
编辑:我尝试将该函数重命名为focus2,现在似乎可以工作了。非常奇怪。有人知道这是为什么吗?

1
如果执行了 show,那么 focus 也会被执行,也许你看不到效果,也许它并不是你定义的函数,但它已经被执行了。 - Felix Kling
尝试将函数focus重命名,看看是否有效。 - H Bellamy
@FelixKling:它没有被执行。感谢您完全忽略了我的帖子。 - Mark
@FelixKling:谢谢。这些东西有列表吗?它在FF 3.X或IE8中不起作用。 - Mark
我不知道有任何解决方法。顺便说一句,在Chrome中似乎可以正常工作。一个通用的解决方案是尽量避免使用全局变量,而是在新的作用域中定义所有内容:(function(){ /* 在这里编写你的代码 */ }()); - Felix Kling
显示剩余5条评论
2个回答

4

它可能确实调用了"focus"方法,但发生的是<a>标签的默认动作夺回了焦点。试试这个:

function focus(id)
{
    var e = document.getElementById(id);
    if (e != null)
    {
       setTimeout(function() { e.focus(); }, 1);
    }
}

通过在单独的事件循环中运行“focus”调用,您可以确保在处理“click”后,元素会获得焦点。

0

看起来你在这里有一个重命名的问题。

只需将函数focus重命名为focusX或其他不同的名称,这在我的测试用例中有效。

记得更新调用href中的focusfocusX


有没有关于一个新名称的想法?强调光标吸附功能?我想不出一个好的名字。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接