2011-05-14 44 views
1

我正在使用jquery根據籃球系列的獲勝者動態淡入內容。舉例來說,讓我們參加NBA東部決賽。這是七個系列中的一個。贏得四場比賽的第一支隊伍獲勝。所以,如果對於第一個輸入標籤,用戶選擇芝加哥公牛作爲他們的贏家。對於第二場比賽,用戶選擇邁阿密熱隊作爲他們的贏家。基於迄今爲止的這些結果,jquery將不得不在額外的輸入標籤中褪色,因爲顯然該系列至少要打5場比賽。動態淡入html值根據值

這是非常基本的。但是,如果客戶想回去編輯遊戲的獲勝者,會不會有人想到如何去做這件事,這會讓他們相應地淡入淡出。我可以使用大量的條件語句來做到這一點,但我真的很想得到一些想法,因爲它涉及更有效的方法。

<script type="text/javascript"> 
$(document).ready(function(){ 
    var data = <?php echo $teamone_ac; ?>; 
    var soulja = <?php echo $teamtwo_ac; ?>; 

    var away_team_other = $('.away_team_other').html(); 
    var home_team_other = $('.home_team_other').html(); 

    var away_team_wild = $('.away_team_wild').html(); 
    var home_team_wild = $('.home_team_wild').html(); 

    $("#game_one_other").autocomplete({ source: data }); 
    $("#game_two_other").autocomplete({ 
     source: data, 
     select: function(event, ui) 
     { 
      var game_one_other = $('#game_one_other').val(); 
      var game_two_other = ui.item.value; 
      var game_three_other = $('#game_two_other').val(); 

      var arr = [game_one_other, game_two_other, game_three_other,  game_four_other, game_five_other]; 

      var away = away_team_other; 
      var home = away_home_other; 

      var numAway = $.grep(arr, function (elem) { 
       return elem === away; 
      }).length; 

      var numHome = $.grep(arr, function (elem) { 
       return elem === home; 
      }).length; 

      if(game_one_other != game_two_other) 
      { 
       $('#one_four').fadeIn('slow'); 
      } 
     } 
    }); 
    $("#game_three_other").autocomplete({ 
     source: data, 
     select: function(event, ui) 
     { 
      var game_one_other = $('#game_one_other').val(); 
      var game_two_other = $('#game_two_other').val(); 
      var game_three_other = ui.item.value; 

      if(game_two_other == game_three_other && game_two_other != game_one_other) 
      { 
       $('#one_four').fadeIn('slow'); 
      } 
     } 
    }); 

    $("#game_one_wild").autocomplete({ source: soulja }); 
    $("#game_two_wild").autocomplete({ source: soulja }); 
    $("#game_three_wild").autocomplete({ source: soulja }); 

    $('#one_four').hide(); 
    $('#one_five').hide(); 

    $('#two_four').hide(); 
    $('#two_five').hide(); 
}); 

+1

你有一個工作的例子,以更好地說明這個想法? – 2011-05-14 20:50:04

+0

我會發布代碼 – Lance 2011-05-14 20:51:01

+0

Yuck。我們不要這樣做,並說我們做到了。 – 2011-05-14 21:43:53

回答

0

你已經有了一個形式。該表格至少有n個元素(在這種情況下,n = 4)。每個元素大概都是選擇/收音機,用戶可以從任一隊中選擇。

<form id="predictWinners" action="submitPredict" method="POST"> 
    <fieldset id="first"> 
     <legend>Game 1</legend> 
     <input class="prediction" type="radio" name="winner" value="[team 1 here]" /> [team 1 here] 
     <br /> 
     <input class="prediction" type="radio" name="winner" value="[team 2 here]" checked="checked" /> [team 2 here] 
     <br /> 
    </fieldset> 
    <!-- repeat for first 4 --> 
    <input type="submit" value="Submit" /> 
</form> 
  1. 附加語義類別給每個選擇的,像「預測」
  2. 添加事件處理程序到其onchange方法

    jQuery(document).ready(function(){ 
        jQuery(".prediction").change(function() { 
         gamesNec = findGamesNecessary(); 
         if(gamesNec > 4) 
         { 
          jQuery("fieldset").each(function(index){ 
           if(index > 4 && index <=gamesNec) { jQuery(this).fadeIn() } 
          }); 
         } 
        }); 
    }) 
    
  3. 收件的事件處理程序,其計算所述根據用戶選擇爲每個團隊贏得勝利,並將其與最大值進行比較。

  4. Go through each fieldset和消除它/創建基於有多少留

你可以寫一個最妙(x)的方法找出多少勝場數是必要的(對於NBA季後賽它的7,但計算這將使代碼的可移植性和可擴展性。

bestOf = function(x) { 
    return (x % 2 == 0) ? (x/2) : ((x/2)+0.5) 
} 

findGamesNecessary = function() { 
    seriesLength = 7 
    team1_wins = 0 
    team2_wins = 0 
    //iterate through each user selection and update the wins. Left as an exercise 
    gamesPlayed = team1_wins + team2_wins 
    gamesNecessary = (team1_wins >1 && team2_wins > 1) ? bestOf(seriesLength-gamesPlayed) + gamesPlayed : bestOf(seriesLength) 
    return gamesNecessary; 
} 
  • 這些可能不完全正確的,但我認爲它很接近。發揮出了排列。用適當的更新相關題庫公式一旦你找出他們