2011-05-17 112 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