Javascript 无法使用JQuery勾选复选框
我在通过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); } 我知道这一点,
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);
}