2009-09-19 51 views
11

选择复选框,我有以下的HTML:jQuery的:基于名称和值

<form id="test"> 
    <input type="radio" value="A" name="C1"/> 
    <a href="javascript:selectCheckbox('C1', 'A');"> OPTION-A </a> 

    <input type="radio" value="B" name="C1"/> 
    <a href="javascript:selectCheckbox('C1', 'B');"> OPTION-B </a> 

<input type="radio" value="C" name="C1"/> 
    <a href="javascript:selectCheckbox('C1', 'C');"> OPTION-C </a> 

    // several other: C2, C3, .. 
</form> 

而且我想实现selectCheckbox(chkbox, value),这应该:

  1. 搜索所有无线电与name = chkbox和设置attr('checked') = false
  2. 搜索收音机有name = chkbox AND val() = value和设置attr('checked') = true

我想不通,正确的选择是什么,我想没有任何运气如下:

var name = "#" + chkbox + " :checked"; 
$(name).each(.. // doesn't work 

$('#'+chkbox).each(.. // if finds only the first occurence 
         // of i.e. C1, although I would expect 3 

$("input[@name='"+chkbox+"']").each(function() { .. 
// leaves me with the following error: 
// Warning: Expected attribute name or namespace but found '@name' 

请让我知道我做错了。非常感谢!

+0

的代码你不应该有相同的ID(“C1”)的多个元素 – Zed 2009-09-19 17:13:35

+0

你说得对,我删除了ID现在。谢谢! – MrG 2009-09-19 17:15:41

+2

“注意:在jQuery 1.3 [@attr]样式选择器被删除(他们以前在jQuery 1.2中被弃用)。“ – Zed 2009-09-19 17:17:19

回答

4

我会使用相对DOM位置做导航。请注意,不能使用相同的id具有不同的元素,但在这种情况下,您不需要使用名称上的属性选择器来查找正确的输入。请注意,您已经知道需要根据点击链接的位置检查各种输入中的哪一个。我更喜欢将代码与标记分开,所以我给链接一个类,以使它们易于选择并将点击处理程序应用程序移入代码中。

更新:请注意,我删除了代码以取消选中其他无线电。对于收音机,设置一个要检查的应该会自动取消选中其他的。

$(function() { 
    $('a.checkbox-selector').click(function() { 
     // get the checkbox immediately preceding the link -- this should 
     // be checked. Checking it should automatically uncheck any other 
     // that may be checked. 
     $(this).prev(':checkbox'); 
       .attr('checked',true); 
     return false; // don't process the link 
    }); 
}); 

<form id="test"> 
    <input type="radio" value="A" name="C1"/> 
    <a href="#" class="checkbox-selector"> OPTION-A </a> 

    <input type="radio" value="B" name="C1"/> 
    <a href="#" class="checkbox-selector"> OPTION-B </a> 

    <input type="radio" value="C" name="C1"/> 
    <a href="#" class="checkbox-selector"> OPTION-C </a> 

    <!-- several other: C2, C3, ... --> 
</form> 
0

尝试$("input[name='C1'] :checked]")。 ID应该是唯一的,所以jQuery可能不希望返回多个元素。

1

在一个页面上不能有多个具有相同ID的元素。您所有的输入元素都有ID“C1”。

+1

你可以这样做,但由于几个原因,这是一件坏事,试试看,并注意$(”#id“ )和$(“[id = id])。后者将返回一个包含但不少元素共享id“id”的集合,而前者将返回一个包含仅包含具有此id的第一个声明元素的包装集合。 – 2009-09-19 17:38:21

7

感谢您的帮助,我终于明白了:

function selectTestAnswer(chkbox, value) { 
    $("[name="+chkbox+"]").each(function() { 
     if ($(this).val() == value) 
      $(this).attr('checked', true); 
     else 
      if ($(this).attr('checked') == true) 
       $(this).attr('checked', false); 
}); 

}

+0

我认为这是比你需要更多的代码。 – tvanfosson 2009-09-19 17:34:15

22

试试这个:

$('input:radio[name="' + chkboxName + '"][value="' + value + '"]') 
    .attr('checked', 'checked'); 
5

您可以使用道具()代替ATTR()如果你的jquery版本> 1.6

请参阅此链接 http://api.jquery.com/prop/

在jQuery 1.6中,.prop()方法提供了一种明确 检索属性值,同时.attr()检索属性。

所以,你正在寻找看起来更像

$('input:checkbox[name="Validators"][value="' + v + '"]').prop('checked',true);