我正在使用原型1.6.0.1。我正在尝试在单击按钮时选中所有复选框。此代码适用于IE 6,但不适用于Firefox 3.我做错了什么?
<input class="submit" type="button" value="check all" onclick="$(this.form).getInputs('checkbox').each(function (elem) {elem.checked = true;});" />
答案 0 :(得分:3)
我创建了一个非常基本的页面来测试您的问题:
<html>
<head>
<script type="text/javascript" src="prototype-1.6.0.3.js" ></script>
</head>
<body>
<form>
<input type="checkbox" id="test1" /> Test 1<br/>
<input type="checkbox" id="test2" /> Test 2<br/>
<input type="checkbox" id="test3" /> Test 3<br/>
<input type="checkbox" id="test4" /> Test 4<br/>
<input class="submit" type="button" value="check all" onclick="$(this.form).getInputs('checkbox').each(function (elem) {elem.checked = true;});" />
</form>
</body>
</html>
&安培;它在Firefox 3.0.8(以及IE)中对我有用......
我不同意其他答案... this.form应该没问题(从提交按钮获取表单对象,然后可以通过getInputs从中获取复选框)。
实际问题是什么?什么都没发生?如果是这样,我唯一能想到的是,复选框与按钮的形式相同吗?
编辑:如果您的代码实际上与上述&amp;它不起作用,我能建议的最好的是你将你的onclick变成一个propper函数调用&amp;然后使用firebug计算出哪个特定位不起作用。即使你的代码看起来像这样:
<html>
<head>
<script type="text/javascript" src="prototype-1.6.0.3.js" ></script>
<script type="text/javascript" >
function checkAll(button) {
var form = $(button.form);
var inputs = form.getInputs('checkbox');
inputs.each(function (elem) {
elem.checked = true;
});
}
</script>
</head>
<body>
<form>
<input type="checkbox" /> Test 1<br/>
<input type="checkbox" /> Test 2<br/>
<input type="checkbox" /> Test 3<br/>
<input type="checkbox" /> Test 4<br/>
<input class="submit" type="button" value="check all" onclick="checkAll(this)" />
</form>
</body>
</html>
然后你可以把断点放在功能&amp;确保'button','form'和'inputs'符合您的预期,并且每个循环中的'elem'也是如此。
答案 1 :(得分:0)
表单是输入的父级,因此this.form应该没有意义。使用ID选择器或父级。
第二件事 - 声明这个js为文档加载分配动作,这种方式有点混乱,从html中分离js以拥有一个干净灵活的代码库。
在jQuery中它会像:
$(document).ready(function(){
$.('#submitId').click(function(){
// check the checkboxes
});
}
原型中的应该是相似的。
答案 2 :(得分:0)
您可以在此链接中看到解决方案: http://www.ryboe.com/2008/07/10/select-all-checkboxes-with-prototype-js.html
如果您不想点击,请尝试以下操作:
var form = $('options');
checkboxes = form.getInputs('checkbox');
checkboxes.each(function(e){ e.checked = 0 });
答案 3 :(得分:-1)
你替换什么
$(this.form)
带
$('MYFORMNAME')