2013-09-25 28 views
4

我有这个向导步骤表单,我通过与绝对定位重叠非活动<li>项目与<ul>列表项目进行了模拟。jQuery - 隐藏某个页面上的元素

向导形式正在工作,期望不同的是我想隐藏在某步骤以前按钮。

这是我在jQuery中的逻辑,但它没有任何好处。

if (index === 0) { 
    $('#prev').addClass(invisible); 
    $('#prev').removeClass(visible); 
} else if (index === 1) { 
    $('#prev').addClass(visible); 
    $('#prev').removeClass(invisible); 
} else { 
    $('#next').addClass(invisible); 
} 

为了让我用eq()索引值链当前步元素像下面

var current; 
var index = 0; 

$(function() { 
    current = $('.pg-wrapper').find('.current'); 

$('#next').on('click', function() { 
    if (current.next().length===0) return; 

    current.next().addClass('current').show(); 
    current.removeClass('current').hide(); 

    navstep.next().addClass('active'); 
    navstep.removeClass('active'); 

    current = current.next(); 
    navstep = navstep.next(); 
    index = current.eq(); 
}); 

我试图孤立它尽可能但是我完整的代码会给你一个更好的主意。 如果你会关心,帮助我查一下JS BIN

+2

行情? addClass(“可见”),你需要测试每次点击 – mplungjan

+0

通过索引,你的意思是不同的页面? 索引为0时,页面为主页,索引为1则下一页等等。 是这样吗? –

+0

@AwaisUmar是的,它指的是我作为无序列表项目所做的页面。因为'eq()'是基于零的,索引0意味着第一个列表项。 –

回答

2

有几个问题

  1. 你用来替代指数.EQ
  2. 你失踪周围的类名
  3. 您的导航逻辑是有缺陷的
  4. 没有必要有两个班报价改变能见度

我相信以下是一个改进,但让我知道如果你有问题。

我添加类= “navBut” 到上一页/下一页,并改写了知名度

Live Demo

var current; 
var navstep; 

$(function() { 
    current = $('.pg-wrapper').find('.current'); 
    navstep=$('.nav-step').find('.active'); 
    $('.pg-wrapper div').not(current).hide(); 
    setBut(current); 

    $('.navBut').on('click', function() { 
    var next = this.id=="next"; 
    if (next) { 
     if (current.next().length===0) return; 
     current.next().addClass('current').show(); 
     navstep.next().addClass('active'); 
    }  
    else { 
     if (current.prev().length===0) return; 
     current.prev().addClass('current').show(); 
     navstep.prev().addClass('active'); 
    } 
    current.removeClass('current').hide(); 
    navstep.removeClass('active'); 
    current = (next)?current.next():current.prev(); 
    navstep = (next)?navstep.next():navstep.prev(); 
    setBut(current); 
    }); 
}); 

function setBut(current) { 
    var index=current.index(); 
    var max = current.parent().children().length-1; 
    $('#prev').toggleClass("invisible",index<1); 
    $('#next').toggleClass("invisible",index>=max); 
} 
+1

非常感谢您的全面贡献。我对您的意见感到非常满意,这表明考虑到可扩展性的更好实践。伟大的学习。 –

+0

欢迎您 – mplungjan

0

我没有看过整个代码,但不应该你的类assignemnts样子:

$('#prev').addClass('invisible'); 
$('#prev').removeClass('visible'); 

即与周围的类名引号?是否真的有必要有一个类visible?分配和删除类invisible应该很容易完成这项工作(只要为这个类设置了正确的样式)。

1

eq函数不会给你索引,因为你需要使用index()函数。

0

你应该让4次修改的设置。

1)使用.index()代替.eq();

2)添加一个函数changeIndex它改变了类取决于索引,并通过点击prev和next来调用它。

3)报价添加到无形和有形

4)。在你的逻辑错误,请尝试第3步,回到第1步。两个按钮都会消失。所以,你必须做出一个按钮可见,如果指数= 0

以下是演示: http://jsfiddle.net/ChaitanyaMunipalle/9SzWB/

+0

您的小提琴没有可见的下一个按钮 – mplungjan

+0

对不起,忘了更新小提琴。现在它已更新。谢谢 –

+0

您还需要另存为基础 – mplungjan

0

利用指数()函数,而不是EQ(),因为EQ()将返回对象和索引()将返回整数值。

DEMO HERE

var current; 
var navstep; 
var index = 0; 

$(function() { 
    current = $('.pg-wrapper').find('.current'); 
    navstep=$('.nav-step').find('.active'); 
    $('.pg-wrapper div').not(current).hide(); 
}(jQuery)); 


$('#next').on('click', function() { 
    if (current.next().length===0) return; 
    current.next().addClass('current').show(); 

    current.removeClass('current').hide(); 

    navstep.next().addClass('active'); 
    navstep.removeClass('active'); 

current = current.next(); 
    navstep = navstep.next(); 
    index = current.index(); 
    change_step(index) 
}); 

$('#prev').on('click', function() { 
    if (current.prev().length===0) return; 
    current.prev().addClass('current').show(); 
    current.removeClass('current').hide(); 

    navstep.prev().addClass('active'); 
    navstep.removeClass('active'); 

    current = current.prev(); 
    navstep = navstep.prev(); 
    index = current.index(); 
    change_step(index) 
}); 

function change_step(value) 
{ 
    if (value === 0) { 
     $('#prev').hide(); 
     $('#next').show(); 
    } else if (value === 1) { 
     $('#prev').show(); 
     $('#next').show(); 
    } else { 
     $('#next').hide(); 
     $('#prev').show(); 
    } 
} 
+0

隐藏/显示不是一个好主意,因为导航会在隐藏前导时移动 – mplungjan

+0

使用addClass检查我的更新http://jsfiddle.net/saranyaciet/ p929U/1/ –

+0

此外,您的代码将只能使用3个项目 – mplungjan