1

以下代码集中在您单击链接后的文本输入。它适用于 Chrome 2.x、IE8 和 Opera 9.64,但不适用于 Firefox 3.0.9。文本输入在 Firefox 中快速闪烁然后消失,我目前正在使用 Windows XP SP2。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
<script>
$(document).ready(function()
{
    $("a").click(function() {
        var field_id = $(this).attr("href");
        $(field_id).focus();
    });
});
</script>

<a href="#text_field">Focus</a>
<input type="text" name="text_field" id="text_field" />

有谁知道如何在 Firefox 中处理上述问题?

4

7 回答 7

10

我不知道这是不是你想要的。要将焦点放在单击标签上的输入上,您可以执行以下操作:

<label for="text_field">Label</label>
<input type="text" name="text_field" id="text_field" />

或者

<label>Label
<input type="text" name="text_field" id="text_field" />
</label>
于 2009-06-09T20:45:35.223 回答
2

正如 Daniel 所暗示的,问题出在链接上的 #text_field 上。设置焦点后,Firefox 想要跳转到文档中的指定位置。您需要做的就是从您的点击处理程序返回 false。

$(field_id).focus();
return false;
于 2009-06-09T20:53:02.837 回答
1

除了其他两个答案之外,您的方式不起作用的原因是因为 href 字段的值通常完全符合 url (这取决于浏览器并且 jQuery 不会将其抽象掉)。

因此,如果您有一个 href “#text_field”,您可能会发现该字段的实际值为“ http://localhost/#text_field ”,这就是它与您的模式不匹配的原因。

如果您想专注于字段,丹尼尔关于标签和“for”属性的建议是一个很好的解决方案。

于 2009-06-09T20:49:30.737 回答
1

这应该可以解决问题:

$(function ()
{
    $("a").click(function ()
    {
        $($(this).attr("href")).focus();

        return false; // remember to stop links default action
    });
});

在最新版本的 Chrome、IE 和 FireFox 中测试。

于 2009-06-09T20:52:02.263 回答
1
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
<script>
$(function() {
    $("a").click(function() {
        var field_id = $(this).attr("href");
        $("#"+ field_id).focus();
        return false;
    });
});
</script>

<a href="text_field">Focus</a>
<input type="text" name="text_field" id="text_field" />
于 2011-07-20T19:31:54.723 回答
0

我认为 FF 中的此错误正在发生,因为在您单击链接后它会运行单击回调,然后它会打开页面#textfield。你可以试试:

$(document).ready(function()
{
    $("div").click(function() {
        var field_id = $(this).attr("forInput");
        $(field_id).focus();
    });
});
</script>

<div forInput="#text_field">Focus</div>
<input type="text" name="text_field" id="text_field" />

这样就没有链接,也不会打开另一个页面。

于 2009-06-09T20:49:55.340 回答
0

您也可以更明确地调用preventDefault事件 arg。

$(document).ready(function()
{
    $("a").click(function(event) {
        var field_id = $(this).attr("href");
        $(field_id).focus()
        event.preventDefault();
    });

});
于 2009-06-09T20:59:25.197 回答