jQuery 焦点功能在 Firefox 中不起作用
以下代码段在您单击链接后聚焦文本输入。 它适用于 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 中处理上述问题?
The following piece of code focuses the text input after you click on the link. It works fine for Chrome 2.x, IE8 and Opera 9.64 but not on Firefox 3.0.9. The text input flashes quickly in Firefox then disappears, I'm currently working on 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" />
Does anyone know how to handle the above in Firefox?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我认为 FF 中发生此错误是因为单击链接后,它会运行单击回调,然后打开 page#textfield。 你可以试试:
这样就没有链接,也不会打开其他页面。
I think this error in FF is occurring because after you click the link it runs the click callback and after that it opens the page#textfield. You can try:
This way there is no link and will not open another page.
您还可以更明确地对事件参数调用
preventDefault
。You could also be more explicit and call
preventDefault
on the event arg.我不知道这是不是你想要的。 要将焦点放在输入上,请单击 标签,您可以执行以下操作:
或者
I don't know if is this you want. To put focus on the input clicking on the label you can do this:
OR
正如丹尼尔所暗示的,问题出在链接上的#text_field。 设置焦点后,Firefox 希望跳转到文档中的指定位置。 您需要做的就是从点击处理程序返回 false。
As hinted by Daniel, the problem is the #text_field on the link. After setting the focus, Firefox is wanting to jump to that named location in the document. All you need to do is return false from your click handler.
除了其他两个答案之外,您的方法不起作用的原因是因为 href 字段的值通常完全符合 url (这取决于浏览器,并且 jQuery 不会将其抽象出来)。
因此,如果您有一个 href“#text_field”,您可能会发现该字段的实际值是“http://localhost/#text_field ”,这就是它与您的模式不匹配的原因。
如果您想专注于字段,丹尼尔关于标签和“for”属性的建议是一个很好的解决方案。
In addition to the other two answers, the reason your way is not working is because the value of the href field is usually fully qualified with the url (this depends on browser and jQuery doesn't abstract it away).
So if you have an href "#text_field" you may find the actual value of the field is "http://localhost/#text_field" which is why it doesn't match your pattern.
Daniel's suggestion with labels and "for" attributes is a good solution if you want to focus on fields.
这应该可以解决问题:
在最新版本的 Chrome、IE 和 FireFox 中进行了测试。
This should do the trick:
Tested in latest version of Chrome, IE and FireFox.