我正在学习JS的基础知识,所以很用。
我有这个链接:
<a href="#comment" onclick="window.location.hash = 'comment'; document.getElementById('comment').focus(); return false;" id="to-comment">Leave a comment</a>
我想在函数中将其单击移动到我的 JS 文件。为此,我有:
jQuery("#to-comment").click(function() {
window.location.hash='comment';
document.getElementById('comment').focus();
return false;
});
它不起作用。我做错了什么?
编辑:澄清我的问题:如何将该onclick功能成功移动到我的JS文件中?
请参阅此工作 jsFiddle。
更新:
我最终得到的是:
$("#to-comment").click(function() {
setTimeout(function() {
$('#comment textarea').focus();
}, 1);
});
.html:
<div id="comment">
<textarea></textarea>
</div>
...
<a href="#comment" id="to-comment">Leave a comment</a>
似乎 Firefox 在 hashchange
事件之后对focus
感到矛盾,因为它刚刚到达 href 中的锚点并对其应用了焦点。第二次聚焦尝试没有产生任何结果,因为它可以防止焦点劫持。
为了规避这种情况,我们可以将comment
ID添加到不"保持"焦点的元素(如div)中。这样,可以在移动到该定位点后更改焦点。
我仍然发现有必要将焦点尝试添加到执行堆栈的末尾setTimeout
以免在单击<a href="#comment"...
后发生的哈希更改+焦点事件的生命周期中发生。
我已经在火狐,野生动物园和chrome中运行了小提琴,似乎还可以。如果没有 javascript,锚点应该按预期工作。
小提琴:
https://jsfiddle.net/jbuw058z/12/
代码未包装在 ready
中。这可能是问题所在。
$(document).ready(function() {
$('#to-comment').on('click', function() {
window.location.hash='comment';
$('#comment').focus();
return false;
});
});
这应该是您的链接:
<a href='javascript: ;' id='to-comment'>Leave a comment</a>
href='javascript: ;'
运行一个空的javascript片段,hense什么都不做。
这应该是你的Javascript:
$( '#to-comment' ).click(function() {
window.location.hash = 'comment'; //Equivalent to a href='#comment'
document.getElementById( 'comment' ).focus();
});
如果你还没有,你需要将以前的JavaScript包装在:
$(function() {
//Previous code
});
附言这还没有经过测试
我认为您必须使用其他标签,而不是a
标签。
<span href="#comment" id="to-comment">Leave a comment</span>