2010-09-15 103 views
2

这在Opera中工作,但显然没有别的。JQuery - 按属性选择?

HTML

<input type="checkbox" name="iphone" value="checked" checked="checked" /> 
<input type="checkbox" name="photocart" value="checked" checked="checked" /> 

JS

$("input[name=iphone]").attr('checked', 'checked'); 
$("input[name=photocart]").attr('checked', 'checked'); 
$("input[name=iphone]").attr('disabled', 'disabled'); 
$("input[name=photocart]").attr('disabled', 'disabled'); 

我也曾尝试以下无济于事。

$("input[name|=iphone]").attr('checked', 'checked'); 
$("input[name|=photocart]").attr('checked', 'checked'); 
$("input[name|=iphone]").attr('disabled', 'disabled'); 
$("input[name|=photocart]").attr('disabled', 'disabled'); 

$("[name=iphone]").attr('checked', 'checked'); 
$("[name=photocart]").attr('checked', 'checked'); 
$("[name=iphone]").attr('disabled', 'disabled'); 
$("[name=photocart]").attr('disabled', 'disabled'); 

$("[name|=iphone]").attr('checked', 'checked'); 
$("[name|=photocart]").attr('checked', 'checked'); 
$("[name|=iphone]").attr('disabled', 'disabled'); 
$("[name|=photocart]").attr('disabled', 'disabled'); 

对他们中的任何人都没有喜乐。有关我如何能够实现这一目标的任何想法?

编辑: - 史诗失败的HTML SORRY复制!

+2

你发布的标记有'name'“hosting”,但是你的选择器都没有在寻找这个,你可以发布这个JS正在寻找的标记吗? – 2010-09-15 11:51:09

回答

1

首先,您有两个名为“hosting”的元素,但您并未使用“input [name = hosting]”。

你的HTML:

<input type="checkbox" name="iphone" value="checked" checked="checked" /> 
<input type="checkbox" name="photocart" value="checked" checked="checked" /> 

JS(即应该工作):

$('input[name=iphone]').attr('checked', true); 
$('input[name=photocart]').attr('checked', true); 
$('input[name=iphone]').attr('disabled', true); 
$('input[name=photocart]').attr('disabled', true); 

请记住,如果您有名为 “iPhone” 或“photocart多个元素“那jQuery也会改变它们的属性。

使用truefalse代替属性值的“已检查”或“禁用”。请记住,您正在操纵DOM,因此它与<input type="checkbox" disabled="disabled" />不同。

+0

对不起,粘贴了错误的html:S。你能再看一遍吗?这已被修复 – JasonS 2010-09-15 11:57:14

+0

此外,我没有太多的控制HTML,所以我宁愿如果这是一个纯粹的jQuery解决方案。 – JasonS 2010-09-15 11:57:49

+0

在您的HTML编辑之后查看我的编辑。 – 2010-09-15 11:58:34

1
//for each one 
$("input[name=photocart] :checked").val(); 
$("input[name=iphone] :checked").val(); 

//general, used with an event 
result = $(this).is(":checked"); 

//general, used with a css class in common (add a class="checkable" to your target inputs) 
$(".checkable:checked").each(function() { 
    result += this.value; 
} 
+0

对不起,粘贴了错误的html:S。你能再看一遍吗?这已被修复。 – JasonS 2010-09-15 11:56:14

1

attribute selector[name=val]比赛有一个属性这就是价值是完全val所有元素。在相反,[name|=val]比赛有一个属性这就是价值或者确切地说是“val”或“val”开头的所有元素紧跟“-”。后者更倾向于与语言代码一起使用(例如[lang|=en]匹配lang="en-US")。因此,请使用前一个选择器进行完全匹配。

0

请注意,你也可以去基本和做这些是这样的:

if ($("input[name=iphone]")[0].checked) // returns true or false depending on the value 
if $("input[name=photocart]")[0].checked) 
if ($("input[name=iphone]")[0].disabled) // returns boolean value 
if ($("input[name=photocart]")[0].disabled) 

$("input[name=iphone]")[0].checked = true;// sets the check to true (checked) 
$("input[name=photocart]")[0].attr('checked', true); 
$("input[name=iphone]")[0].disabled = false;// enables the input control 
$("input[name=photocart]")[0].attr('disabled', true); 

另一个很酷的技巧,将值设置为它目前还不是这就像一个的toogle:

$("input[name=iphone]")[0].checked = !$("input[name=iphone]")[0].checked; 

编辑:例如对所有选中的复选框设置为未选中:

$("input:checked")[0] = false;// single 
$('input:checked').each(function() { 
    this.checked = true; 
}); 

注意:如果你给他们一类被称为“mycheckb黄牛”更简单:

var toggle_click = false; 
$(function() { 
    $('.mycheckbox').click(function() { 
    $('.mycheckbox').each().checked = !this.checked; 
    toggle_click = !toggle_click; 
    }); 
}); 

,如果它被选中,取消选中它:

$('.cptIcdCheckbox:checked').each(function() { 
      this.checked = !this.checked; 
}); 

我使用这种技术,如果我有一个复选框列表和一个‘头’复选框取消选中它们全部或检查它们全部取决于“组标题”复选框值,它是单击和/或更改事件。

+0

'$(...)'返回一个数组...你不需要执行'$(...)[0] .checked'等等来获得实际的DOM对象吗? – 2010-09-15 18:49:20

+0

@Cory Larson--简言之,是后两个例子中的每个。简单的只适用于你只有一套 - 编辑示例。 – 2010-09-15 21:24:10