【问题标题】:How to highlight a table cell (TD) when radio button is clicked with JavaScript/JQuery?使用 JavaScript/JQuery 单击单选按钮时如何突出显示表格单元格 (TD)?
【发布时间】:2009-12-29 18:22:11
【问题描述】:

我正在开发一个在线棒球/垒球记分簿应用程序。当用户更改选定 TD 内的单选按钮之一的值时,我想直观地更改特定表格单元格(特定 TD)的 CSS。

这是表格的 JPG:http://www.ppgeez.com/images/gt_ab.jpg

有 12 名玩家,每个玩家最多可以有 6 个 AB。下面的代码是一个玩家的单个 At-Bat (AB) 示例,您可以在其中指定玩家对该特定 AB 所做的事情。

    <td>
  <table border=1>
    <tr>
      <td>
    <table border=0 cellspacing=0 cellpadding=0>
        <tr><td><input type=radio name=p1o1 value="1B">1B
            <td><input type=radio name=p1o1 value="FO">FO
        <tr><td><input type=radio name=p1o1 value="2B">2B
            <td><input type=radio name=p1o1 value="GO">GO
        <tr><td><input type=radio name=p1o1 value="3B">3B
            <td><input type=radio name=p1o1 value="FC">FC
        <tr><td><input type=radio name=p1o1 value="HR">HR
            <td><input type=radio name=p1o1 value="SF">SF
        <tr><td><input type=radio name=p1o1 value="BB">BB
            <td><input type=radio name=p1o1 value="K" >K
        <tr><td><input type=radio name=p1o1 value="RE">RE
            <td><input type=radio name=p1o1 value="DP">DP
   </table>

      <td valign=top align=center>
        Run<br><input type=checkbox name=p1run1><br><hr>
        RBIs<br><select name=p1rbi1>
                <option value=0>0
                <option value=1>1
                <option value=2>2
                <option value=3>3
                <option value=4>4
                </select><p>
        <input type=radio name=p1o1 value="NA" checked>N/A
      <td>

  </table>
<td>

我想在视觉上突出显示(通过更改 TD 的背景颜色)每个“已完成”的 AB。基本上,当表单加载时,默认选择“N/A”单选按钮。如果选择了任何其他单选按钮(1B、2B、K 等...),则应突出显示该 TD。如果再次选择 N/A,则应取消突出显示。我不知道从哪里开始,任何帮助将不胜感激。谢谢!

更新:最终工作代码 - 我使用了下面的函数,但由于我使用的是嵌套表,因此技巧是使用 eq( x)。

    $("td input[type=radio]").change(function () {
  function clearTable(){
  var table = $(this).parents('table:eq(0)');
    $(table).removeClass('selected');
  }
  $('input[value="NA"]').click(clearTable);
  var table = $(this).parents('table:eq(1)');
  if (this.value != 'NA') {    
    table.addClass('selected');
    }
}); 

更新 - 为所有表格指定特定类别

// 使用 atBat 类设置每个表 ABtables = $('input[type="checkbox"]').closest('table'); ABtables.each(function() { $(this).addClass('atBat'); });

【问题讨论】:

    标签: javascript jquery css


    【解决方案1】:

    表格单元格突出显示

    $(function(){
      function clearTable(){
        $('td.selected', table).removeClass('selected');
      }
      var table=$('input[value="1B"]').closest('table');
      $('input[value="NA"]').click(clearTable);
      $(':radio', table).click(function(){
        clearTable();
        $(this).closest('td').addClass('selected');
      });
    });
    

    针对评论编辑的代码

    //assuming you've given the class atBat to any table which might be selected
    $('table.atBat').each(function(){
      var table=$(this);//cache the current iteration
      var childTable=table.find('table:first');
       //replace above click handler with this
       $(':radio', childTable).click(function(){
        if ($(this).val()==='NA'){
          table.removeClass('selected');
        }
        else {
         table.addClass('selected');
        }
       });
    })
    

    希望这会有所帮助,祝你好运!

    【讨论】:

    • 这基本上是我使用的解决方案。这段代码所做的一件事是从以前突出显示的所有元素中删除类,当我希望它从特定表中删除时。进行了几次编辑,效果非常好。
    • arrrgghhh! IE下不行!!!看起来像是带有 eq 的东西...有什么想法可以解决这个问题吗?
    • 我用“工作”代码更新了原始帖子 :) 它只在 FF 中工作......在 IE 中,我可以点击单选按钮!= NA,但没有任何反应。如果我单击第二个单选按钮!= NA,那么它会使用 addClass 正确突出显示。一旦实际应用了 addClass,clearTable/removeClass 函数似乎在所有浏览器中都有效,但它需要多次单击 (2) 才能应用它。任何想法都会很棒。谢谢!
    • clearTable 函数应在任何单击/更改处理程序之外定义。您的代码现在设置的方式定义了函数并将点击绑定在change 函数内。这些应该分开。即设置表变量->然后绑定NA单击->然后绑定更改字段。您还应该在处理程序中使用不同的变量名(而不是table)。如果您有任何问题,请告诉我,我会更新我的帖子。
    • 嗯...也许您可以直接查看测试页面:ppgeez.com/stats/enter_game.php 基本上,有一个主表,然后在每个表中 TD 包含 2 个嵌套表。单选框本身在一个表格中,而复选框和 N/A 单选按钮在另一个表格中。这就是为什么,当我关闭突出显示时,我必须找到第 0 个父母,而不是像我用来打开它的第 1 个父母。检查一下...如果您可以更新您的代码,以便我可以看到它是如何完成的,那就太好了。谢谢。
    【解决方案2】:

    您可以只使用这个 jQuery(未经测试,但应该可以):

    $(document).ready(function() {          
    
        $("td input[type=radio]").change(function () {
            var td = $(this).parent();
            td.css("background", "#000");
        }); 
    });
    

    此外,作为提到的其他答案之一,您需要关闭 td 和其他 html 标签。

    【讨论】:

      【解决方案3】:

      您可以创建一个 javascript 函数来执行此操作。首先,检查选择了哪个,然后(在循环中)获取 TD。有了这两样东西,剩下的就很简单了。

      这里有一些代码可以帮助您入门:

      首先,您需要为每个指向该函数的单选按钮添加一个事件处理程序 -

      function handleRadioClick(e) {
          var ev = e || window.event;
      
          //ev.srcElement will give you the radio button clicked
          //This code will get you the TD
          var obj = ev.srcElement;
          while (obj && obj.parentElement && obj.tagName.toLowerCase() !== 'td') {
              obj = obj.parentElement
          }
      
          //at this point, obj should be the TD
      }
      

      我没有为你做这一切,但它应该让你开始。

      编辑:

      我刚刚意识到您在自己的 TD 内的表格中拥有单选按钮,在您所追求的 TD 内。您必须修改我的代码以获取表,然后获取其父级(您之后的 TD)。

      【讨论】:

        【解决方案4】:

        首先,您的很多标记似乎都缺少结束标记。特别是结束 td 和 option 标记。

        使用jquery,可以改变选中时td的背景颜色:

        <input type="radio" name="p1o1" value="1B" onclick="$(this).parent().css('background', 'yellow');" />
        

        然后要清除您想要给出的选定背景,编写一个函数,当用户单击 N/A 单选按钮时,会执行以下操作:

        var $kids = $('#mytableid').children();
        $kids.css("background", "#FFF");
        

        【讨论】:

          猜你喜欢
          • 2017-09-21
          • 1970-01-01
          • 1970-01-01
          • 2011-02-06
          • 2012-08-24
          • 2015-09-03
          • 1970-01-01
          • 2015-07-04
          • 1970-01-01
          相关资源
          最近更新 更多