Javascript 无法使用JQuery勾选复选框

Javascript 无法使用JQuery勾选复选框,javascript,jquery,Javascript,Jquery,我在通过JQuery检查复选框时遇到问题-我已经这样做了: if(element[1]==3) alert('#'+element[0]+'_1');//shows #chk_1 $('#'+element[0]+'_1').attr('checked', true); $('#'+element[0]+'_2').attr('checked', true); $('#'+element[0]+'_3').attr('checked', true); } 我知道这一点,

我在通过JQuery检查复选框时遇到问题-我已经这样做了:

if(element[1]==3)
  alert('#'+element[0]+'_1');//shows #chk_1
  $('#'+element[0]+'_1').attr('checked', true);
  $('#'+element[0]+'_2').attr('checked', true);
  $('#'+element[0]+'_3').attr('checked', true);    
}
我知道这一点,因为我可以看到具有正确变量名的警报窗口。我还包括了JQuery,我的firebug没有抱怨任何错误,只是什么都没有发生

我还有一些其他功能在用户单击时处于活动状态:

onclick="checker($(this).attr('id'));" 
它本质上检查用户是否被允许勾选复选框,但如果我使用上述方法,它不应该被激活,对吗?此外,我还以这样一种方式进行了自动勾选,即保留了这些规则,并且允许用户勾选复选框

我能够单击复选框,并且这些规则检查在checker功能中正确完成

救命啊!我不知道说实话有什么不对

我感谢你的帮助

更新 根据Pekka的建议,我发现JQuery函数似乎不起作用,例如:

$('#'+元素[0]+''u 1')。隐藏()

什么也没做。这意味着元素的ID有问题?但是元素确实存在,并且它的名称正确

我已为复选框指定了一个值,并尝试了以下操作:

alert($('#'+元素[0]+''u 1').val())

我得到“未定义”返回!为什么?

更新2 测试是否已检查:

$('#'+element[0]+'_1').attr('checked', true);

if ($('#'+element[0]+'_1'+':checked').val() !== null) {
   alert('#'+element[0]+'_1');
}
这显示了警报框。所以,它似乎是检查,但我看不到它

更新-解决方案 不要像我这样是个傻瓜,用:
$(document.ready)(function(){

我设法把每个人的时间都浪费在没有做这件事上,我想从现在起,这段代码将成为我的标准


谢谢大家的持续帮助!:)我将不得不给提到文档加载的人[lillq]。

试试
(“#”+元素[0]+“\u 1”)。单击()

更改选中状态可能会触发onchange事件,但肯定不会触发click事件,因此这与此无关

您不应将属性设置为
true
,而应设置为
“选中”

看看这个。

一个想法是:

如果html中有多个
chk_1、chk_2、chk_3
ID,则
$(“#”+”元素[0]+“_2”).attr('checked',true);
将只影响文档中的第一个ID

我运行了您提供的代码,如下所示:

html

这里的init函数检查文档加载后的所有框。是否有其他信息可以帮助我们


我喜欢将这样的示例简化为最简单的失败代码。

您是否可以尝试一些更简单的方法,例如隐藏元素,以确保您可以使用
$(“#”+元素[0]+“_1”)
?我认为这是一个元素访问问题(例如,重复ID),在框中打勾的代码对我来说很好。好主意-我刚刚做了这个
$('.''.'元素[0]+''.'u 1')。hide();
,但这也不起作用!我不明白,元素确实存在并且它被正确引用了!我已经仔细检查了。我想知道是什么$('.'元素[0]+'.'u 1')).length是-它是否真的找到了要检查的内容?也许可以对document.getElementById进行同样的尝试,看看是否得到不同的结果。你能发布一个在线示例吗?你能搜索HTML代码中重复的ID吗?length返回0-这意味着什么?@Pekka-我没有重复的ID-我已经搜索了文档(原始代码和提供的HTML)。虽然名称和ID相同,但我不认为这有什么区别。我已经尝试过了,但也不起作用!但我应该将其作为最佳实践使用?@Abs:根据jQuery常见问题解答,您应该这样做。如果仍然不起作用,请验证元素是否确实具有该ID(不仅仅是名称)并且您没有重复的id。常见问题解答是错误的。
attr
set(在大多数情况下,除了一些解决方法)JavaScript属性,而不是HTML属性。这很清楚:如果设置不影响复选框检查性的
checked
HTML属性,则只有
defaultChecked
​属性映射到的属性。jQuery正在设置属性,因此设置属性的正确值为
true
。尽管
“checked”
,但与任何其他非空字符串值一样,它仍然有效,因为它是真实的。我可以确认我没有重复的元素,具有该ID的复选框存在并且没有重复。什么t如果它已经被选中了?在这种情况下,这不会取消选中吗?您可以使用:not(:checked)只选择未选中的输入somfg感谢您提到文档已加载-我用
$(document).ready(function()包装了我的JS函数{
现在一切都正常了!我真不敢相信这是浪费时间,也向大家道歉!我将编辑我的问题。
$('#'+element[0]+'_1').attr('checked', 'checked');
...
<body>
    <input type="checkbox" id="el1" onclick="checker($(this).attr('id'));" />Text<br />
    <input type="checkbox" id="el2" onclick="checker($(this).attr('id'));" />Text<br />
    <input type="checkbox" id="el3" onclick="checker($(this).attr('id'));" />Text<br />
</body>
</html>
<script type="text/javascript">
    init();
</script>
function init () {
    $('#el1').attr('checked', true); 
    $('#el2').attr('checked', true); 
    $('#el3').attr('checked', true); 
}
function checker(id)
{
    alert(id);
}