Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法阻止javascript中的默认事件_Javascript_Jquery_Preventdefault - Fatal编程技术网

无法阻止javascript中的默认事件

无法阻止javascript中的默认事件,javascript,jquery,preventdefault,Javascript,Jquery,Preventdefault,我只是一个初学者,所以也许这个问题会让你微笑,但我就是找不到任何解决办法 我有一个链接: <div class="comments"><a href="#" onclick="get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div> 一切正常,直到我点击一个链接。。。每次我点击一个链接,它就会把我带到页面的顶部。有人能告诉我如何解决这个问题吗?您需要从事件处理程

我只是一个初学者,所以也许这个问题会让你微笑,但我就是找不到任何解决办法

我有一个链接:

 <div class="comments"><a href="#" onclick="get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>

一切正常,直到我点击一个链接。。。每次我点击一个链接,它就会把我带到页面的顶部。有人能告诉我如何解决这个问题吗?

您需要从事件处理程序返回false

<div class="comments"><a href="#" onclick="return get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>

这会导致该行为:
href=“#”

因此,如果您不需要它,可以在href中调用javascript函数,或者不使用此属性,那么您必须将锚点设计为链接

href=“#”
表示转到页面顶部。您可以使用其他参考:
href=“#foo”
这意味着使用id foo跳转到

可能的解决办法:

<a href="javascript:get_comments('.$row['post_id'].')">


如果删除href,它看起来就不像是一个带有.mylink类的链接。

可以使用
href=“#”
但我看不到您的默认函数

试试这个:

HTML:

使用
.data()
可以访问
数据-*
属性

使用
.click()
您拥有比
onclick更好的事件处理程序,传递事件(单击“#”)并阻止它

JSFiddle:

(很抱歉对答案进行了1000次编辑)

试试这个,它会有用的

 <div class="comments"><a href="Javascript:void(0)" 
  onclick="get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>

当使用(或滥用)A标记作为JavaScript按钮时,您有两个选项来防止默认行为(即跟随链接):

javascript:void 0

不要设置
href=“#”
,而是使用它来完成工作并返回
未定义的
,例如:
href=“javascript:void(获取注释('.$row['post\u id'.])”
。有关
void
的更多信息,请参见此

event.preventDefault

更好的方法是分离HTML和JavaScript(请参阅),并使用事件处理程序。在JS中,您可以简单地向DOM元素添加一个处理程序

<a id="commentsLink" data-id=".$row['post_id']." href="#">comments</a>

在我看来,
onlick
事件处理程序与jQuery结合使用是不可取的。充分利用jQuery的强大功能,而不仅仅是一点点:-)您能不能请您更好地格式化它并删除示例中不需要的代码?例如,
get_comments
中的几乎所有内容都可以使用,但不推荐使用,并且受到高度鄙视。如果jQuery可用,则可以使用非常简单的工具来正确执行。请说明您在何处发现此内容不推荐使用?没有
href
属性的锚元素在HTML4中无效
<div class="comments">
    <a href="#" class="comments-click" data-id="'.$row['post_id'].'">'.$comments_no.' comments</a>
</div>
$(document).ready(function() {
    $('.comments-click').click(function(event) {
        event.preventDefault(event);
        id = $(this).data('id');
        /* ... */
    });
});
 <div class="comments"><a href="Javascript:void(0)" 
  onclick="get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>
<a id="commentsLink" data-id=".$row['post_id']." href="#">comments</a>
var commentsLink = document. getElementById("commentsLink");
commentsLink.addEventListener("click", function(event) {
  var postId = event.target.getAttribute("data-id");
  // your code
  event.preventDefault();
}