我对Prototype JS(v1.7)比较陌生,而且我坚持不懈。我正试图检测单选按钮选择何时发生变化。这是代码:
单选按钮:
<input class="amounts" type="radio" name="amount" id="amount-1" value="1" />
<input class="amounts" type="radio" name="amount" id="amount-2" value="2" />
<input class="amounts" type="radio" name="amount" id="amount-3" value="3" />
使用Javascript: 这是我采取的一个刺,这不起作用:
Event.observe($$('amounts'), 'change', function(event) {
alert('change detected');
});
表单加载时,不会选中单选按钮。我想用javascript来检测这些事件:
1)如果之前没有选择任何单选按钮,则选择单选按钮
2)单选按钮选择改变
非常感谢任何帮助。谢谢!
答案 0 :(得分:12)
它不起作用,因为$$
返回一个元素数组,Event
需要一个元素。此外,$$('amounts')
与任何元素都不匹配,没有<amounts>
个标记。
更好的方法是使用易于识别的单个祖先元素。
<form id="amounts-form">
<input class="amounts" type="radio" name="amount" id="amount-1" value="1" />
<input class="amounts" type="radio" name="amount" id="amount-2" value="2" />
<input class="amounts" type="radio" name="amount" id="amount-3" value="3" />
</form>
现在有一个唯一的ID可以使用Event.on
$('amounts-form').on('change', '.amounts', function(event) {
alert('change detected');
});
请注意,事件正在按'.amounts'
进行过滤,期间说使用了班级名称
如果您正在使用FireBug for FireFox或Chrome的开发人员工具,那么您可以直接在控制台中测试脚本的各个部分。通过键入$$('.amounts')
答案 1 :(得分:2)
Alternegro的回答尝试使用迭代器将事件处理程序直接附加到“amount”无线电元素,但由于以下几个原因不起作用:
这个应该有效:
$$("[id^=amount-]").invoke(
'on',
'change',
function(){alert("hello " + this.id)}
)
(YMMV在事件处理程序中使用“this”。我只检查了Firefox中的代码)
答案 2 :(得分:0)
将这些复选框设为同一类更有效率,但您也可以尝试
$("id^=amounts-").change(function(){alert("blah blah")})