从tr onclick中选择单选按钮

时间:2010-10-01 03:19:14

标签: jquery

这是我在表格中的tr:

        <tr id="mlevel" class="__tr_class__" onclick="needFunction()">
            <td class="checkbox"><input type="radio" name="membership" id="__ID__" value="__ID__" /></td>
            <td class="icon"><img src="__Icon__" width="60" height="60"/></td>
            <td class="name"><h2>__Name__</h2></td>
            <td class="price"><h4>__Price__ for __Days__ Days</h4></td> 
            <td class="auto"><h4>__Auto__</h4></td>
            <td class="auto"><h4>__Active__</h4></td>
        </tr>

当我点击tr时,我想要选择无线电输入。我想使用jquery或简单的东西。只是不确定要走哪条路。有没有人知道这样做的简单功能?

2 个答案:

答案 0 :(得分:6)

你真的不需要一个功能,以下应该有效:

$('tr').click(
    function() {
        $('input[type=radio]',this).attr('checked','checked');
    }
);

<小时/> 已编辑以回应@ whatshakin的问题:

  

完美无缺。你能解释一下:$('input [type = radio]',this)

这会使用CSS3样式属性选择器查找匹配'input [type = radio]'的元素(在中查找inputtype="radio"个元素this的上下文(this是当前对象,在本例中为tr)。

稍微更权威的描述/说明如何运作是api.jquery.com/jQuery

<小时/> 已编辑因为无法取消选中收音机令我感到恼火,以下更正:

$(document).ready(
  function() {
    $('tr').toggle(
      function(){
        $('input:radio', this).attr('checked',true);
      },
      function() {
        $('input:radio', this).attr('checked',false);
      }
      );
  }
  );

感谢@Thomas(在评论中)指出我在前面的代码中做出的错误假设,即当$(this).attr('checked','checked')评估为true时,显然''不会评估为false。希望这种方法可以纠正早期的天真和愚蠢。

另外:演示位于jsbin

<小时/> 已编辑上述代码(使用toggle()的代码)以回应@TimBüthe的评论:

  

为什么不使用“:radio”伪选择器?

在我阅读他的评论之前,我甚至不知道的伪选择器,然后访问了jQuery API

答案 1 :(得分:4)

这是一个整洁的切换,无需内联Javascript(和 with multiple radio buttons ):

守则:

$(function() { // <== Doc ready

    $('tr').click(function(event) {  

        if(event.target.type != "radio") {

            var that = $(this).find('input:radio');
            that.attr('checked', !that.is(':checked'));

        }
    });
});

jsFiddle example


细分:

  1. 使用tr

  2. 为所有$(tr).click()元素创建 .click() 处理程序
  3. 在处理程序中使用$(this).find('input:radio')将变量分配给tr中的单选按钮。这将查看this的所有后代(单击tr)并找到单选按钮。 jQuery context 在其实施中使用 .find() ,因此上一个与$('input:radio', this)同义

  4. 将单选按钮的checked属性设置为与其相反的属性。可以使用truefalse检查或取消选中内容,.is(':checked)返回truefalse!that.is(':checked')只是与当前检查状态相反。请注意,如果用户直接点击单选按钮,我们不想触发此操作,因为这会取消支票的原生效果,因此我们使用if (event.target.type != "radio")