首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preventDefault()不工作

preventDefault()不工作
EN

Stack Overflow用户
提问于 2014-04-08 13:57:34
回答 3查看 88关注 0票数 1

我有一个通过一些jQuery函数的动画导航。一切都很好,但有一件事让我发疯了。最后一项( nb项)。5)应该重定向到新的页面,但它不会发生。下面是前几行代码的条件

代码语言:javascript
复制
$(document).ready(function(){
    $('li > a').on('click', function(e) {
        if ($(this).parent().has('p')) {        
            e.preventDefault();
        }

        if (!$(this).hasClass('active')) {
            $('li a').next('p').stop().slideUp();
            $(this).next('p').stop().slideDown();
            $('li a').removeClass('active');
            $(this).addClass('active');
        }
        else if ($(this).hasClass('active')) {
            $(this).next('p').stop().slideUp();
            $(this).removeClass('active');
        }

    })

}) 

演示:http://jsfiddle.net/SQTcN/2/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-08 14:02:11

has(selector)

描述:将匹配元素的集合缩减为具有与选择器或DOM元素匹配的后代的元素集。 返回: jQuery

.has()返回一个jQuery对象。

使用.find('p').length.has('p').length代替.has('p')

代码语言:javascript
复制
$(document).ready(function(){
    $('li > a').on('click', function(e) {
        
        if ($(this).parent().find('p').length) {
            e.preventDefault();
        }

        if (!$(this).hasClass('active')) {
            $('li a').next('p').stop().slideUp();
            $(this).next('p').stop().slideDown();
            $('li a').removeClass('active');
            $(this).addClass('active');
        }
        else if ($(this).hasClass('active')) {
            $(this).next('p').stop().slideUp();
            $(this).removeClass('active');
        }
    });
}); 

JSFIDDLE

票数 4
EN

Stack Overflow用户

发布于 2014-04-08 14:03:16

.has()返回一个jQuery对象,而不是布尔值。

只需将您的if改为:

代码语言:javascript
复制
if (!($(this).hasClass("odkaz"))) { 
    e.preventDefault();
}

代码:

代码语言:javascript
复制
$(document).ready(function(){
    $('li > a').on('click', function(e) {
        if (!($(this).hasClass("odkaz"))) { 
            e.preventDefault();
        }

        if (!$(this).hasClass('active')) {
            $('li a').next('p').stop().slideUp();
            $(this).next('p').stop().slideDown();
            $('li a').removeClass('active');
            $(this).addClass('active');
        }
        else if ($(this).hasClass('active')) {
            $(this).next('p').stop().slideUp();
            $(this).removeClass('active');
        }

    })

}) 

演示

票数 1
EN

Stack Overflow用户

发布于 2014-04-08 14:04:03

.has()不返回布尔值。它返回一个jQuery对象。从医生那里:

将匹配元素的集合减少为具有与选择器或DOM元素匹配的后代的元素集。

所以,你需要做这样的事情:

代码语言:javascript
复制
if($(this).parent().has('p').length)

或者更好的是,您不需要遍历到父节点才能返回。只需做:

代码语言:javascript
复制
if($(this).siblings('p').length)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22939287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档