2011-05-17 73 views
0

有人可以帮我解决这个问题,出于某种原因,在页面加载时,按钮似乎都处于“开”位置,即使我有一个复选框“已选中”,另一个未被选中。我初始化时出现的问题

这个问题似乎出现在initialize_slideCheck()的if/then中。我想我滥用下一个()?

我该如何定位仅包含在与复选框相同的div中的.checkboxTrigger?

PAGE LOCATED HERE

任何帮助表示赞赏!

 

$(document).ready(function(){ 

       function initialize_slideCheck(){ 
        var slideCheck = $('.slideCheck'); 

        slideCheck.wrap(""); 
        slideCheck.after(""); 

        slideCheck.attr('style', 'display:block;'); 

        if(slideCheck.is(':checked')){ 
         $(this).next(".checkboxTrigger").css("left", "-8px"); 
        }else if(slideCheck.not(':checked')){ 
         $(this).next(".checkboxTrigger").css("left", "-40px"); 
        } 

       } 

       initialize_slideCheck(); 

       $(".checkboxTrigger").click(function(){ 

        var position = $(this).position().left; 

        if(position == -8){ 
         $(this).animate({"left": "-40px"}, 200); 
         $(this).prev('.slideCheck').attr('checked', ''); 
        } 
        else if(position == -40){ 
         $(this).animate({"left": "-8px"}, 200); 
         $(this).prev('.slideCheck').attr('checked', 'checked'); 
        } 

       }); 

      }); 
 

回答

1

这应该可以做到。 is()返回true如果集合中的元素的任何与选择器匹配。在这种情况下,':checked'条件将始终为真。

function initialize_slideCheck() { 
    $('.slideCheck') 
     .wrap("<div class='checkboxWrapper rounded'></div>") 
     .after("<a class='checkboxTrigger' href='#'></a>") 
     .css({'display':'block'}) 
     .each(function(){ 
      var $this = $(this); 
      if ($this.is(':checked')) { 
       $this.nextAll('.checkboxTrigger').css({'left':'-8px'}); 
      } else { 
       $this.nextAll('.checkboxTrigger').css({'left':'-40px'}); 
      } 
     }) 
} 

编辑:

此外,checkboxTrigger元素上的点击处理程序不 '检查' 复选框正确。替换.attr('checked', '').attr('checked', false)

+0

哇先生考伊先生非常感谢你的帮助,它的工作!我确定通过查看我的代码,你可以告诉我这是新的,我甚至不知道我们可以将.wrap,.after等堆叠在一起。只要看看你的代码就可以看出我离程序员有多远,再次感谢! – Stefan 2011-05-18 13:04:21

+0

@ user548906没问题。当你掌握它时,jQuery很容易。坚持下去。 – 2011-05-18 13:12:13

0

next()选择下一个兄弟姐妹。改为使用nextAll('selector')。您可以查看完整的手册nextAll()hereprev()也是如此。改为使用prevAll()。您可以阅读该手册here

+0

感谢您的帮助,我尝试了nextAll,我仍然没有运气。我已经通过指向我正在处理的示例页面的链接更新了OP,您认为您可以快速浏览一下吗? – Stefan 2011-05-17 23:06:02

0

很难说没有看到HTML,但在我看来,问题是在initialize_slideCheck方法中调用$(this).next(...)方法。此时这个是文件,所以next()不会得到slideCheck旁边的元素。我认为你可能试图做的是:

function initialize_slideCheck(){ 
    ... 
    if(slideCheck.is(':checked')){ 
     slideCheck.next(".checkboxTrigger").css("left", "-8px"); 
    } else if(slideCheck.not(':checked')){ 
     slideCheck.next(".checkboxTrigger").css("left", "-40px"); 
    } 
} 

请注意从$(this).next到slideCheck.next的更改。

+0

嗯,我给了这个镜头,仍然没有骰子,我已经更新了OP链接到我正在工作的页面,请你快速浏览一下?忽略CSS,只是为了显示一旦这个东西正常工作将被隐藏的复选框。 – Stefan 2011-05-17 23:05:20