2011-05-14 45 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; 
} 
  • 这些可能不完全正确的,但我认为它很接近。发挥出了排列。用适当的更新相关题库公式一旦你找出他们