2012-04-24 34 views
2

我正在嘗試構建一個簡單的常見問題解答頁面,其中包含當他們的問題被點擊時的slideDown和Up。當用戶點擊類「問題」時,我希望mytarget變成'#'+ [該問題的ID] +'ans',這樣適當的答案就會下滑。

toggleSlide部分工作時,我只是給它一個答案的ID;我不確定我的.click函數是錯誤的,還是我使用$(this),或者兩者兼而有之。

$(document).ready(function() { 
    var qid = ''; 
    var mytarget = ''; 

    function toggleSlide() { 
     if ($(mytarget).css('display') == 'none') { 
      $(mytarget).slideDown(600, 'swing'); 
     } 

     else if ($(mytarget).css('display') == 'block') { 
      $(mytarget).slideUp(600, 'swing'); 
     } 
    }; 

    $('.answer').hide(); 
    $('.question').click(function() { 
     qid = $('this').id(); 
     mytarget = '#' + qid + 'ans'; 
     toggleSlide(); 
    }); 
});​ 

回答

4

試試這個:

$(function() { // shorthand for $(document).ready()... 
    $('.answer').hide(); // preferably div.answer if they are all <div>s 
    $('.question').click(function() { 
     // no need to check what it currently is, use slideToggle 
     $('#' + this.id + 'ans').slideToggle(600, 'swing'); 
    }); 
}); 
+0

謝謝!爲什麼div.answer比.answer更好? – DsDyer 2012-04-24 19:53:05

+2

我喜歡這一款。但div.answer實際上並不可取。 jsPerf可以顯示沒有元素的普通類將會更快。另外,我仍然喜歡使用$(document).ready(),因爲它對於閱讀代碼的任何人(我自己或其他人)來說都是非常明顯的,它是文檔就緒函數。但那部分是個人喜好。 – 2012-04-24 19:54:25

+1

'$(this).attr('id')'=>'this.id'。 – gdoron 2012-04-24 19:57:41

1

變化來自:

$('this').id(); 

要:

$(this).attr('id') 
  • this是關鍵字在JavaScript中,而不是一個字符串。
  • 在jQuery中沒有id函數,你得到的編號爲.attr('id')
    id是DOM元素的屬性。所以你可以使用這個:this.id

$('.question').click(function() { 
    qid = this.id; 
    mytarget = '#' + qid + 'ans'; 
    toggleSlide(); 
});​ 
+0

謝謝。 this.id 也有效。 – DsDyer 2012-04-24 19:47:19

+0

@ user1354606。閱讀筆記。 – gdoron 2012-04-24 19:49:52

0

不要做:qid = $('this').id();

做:qid = $(this).attr('id');,而不單引號

+0

什麼是$(...).id()'?沒有這樣的'id'功能。 – gdoron 2012-04-24 19:45:05

+0

@gdoron,你是對的。專注於這個vs'這個'。現在顯示正確的解決方案。 – agarcian 2012-04-24 19:47:21

+0

謝謝gdoron。我不知道我在哪裏得到.id()是一件事情的想法。我在沒有互聯網的汽車旅行中寫了這個,在我的手機上做了研究,並且必須在沒有閱讀上下文的情況下拿起這個功能。 – DsDyer 2012-04-24 19:58:08

0
function toggleSlide(mytarget) { 
    if ($(mytarget).css('display')=='none'){ 
     $(mytarget).slideDown(600, 'swing');} 

    else if ($(mytarget).css('display')=='block'){ 
     $(mytarget).slideUp(600, 'swing');} 
}); 

當你調用你應該通過參數的功能時:

qid = $(this).id(); 
    mytarget= '#' + qid + 'ans'; 
    toggleSlide(mytarget);