Javascript 原型,收听单选按钮的变化

Javascript 原型,收听单选按钮的变化,javascript,html,prototypejs,radio,Javascript,Html,Prototypejs,Radio,我已经为此寻找了好几天的解决方案,所以我希望你能帮助我 我正在使用Ryan Fait的自定义表单元素,它允许您设置复选框和单选按钮等样式 唯一的问题是我不能再使用onClick事件,因为实际的框会被一个带有自定义无线电元素的图像覆盖 javascript确实更改了单选按钮,但我似乎找不到检测更改的方法 目前,我尝试了以下方法: Event.observe(window, 'load', function() { $('startquestion').observe('change

我已经为此寻找了好几天的解决方案,所以我希望你能帮助我

我正在使用Ryan Fait的自定义表单元素,它允许您设置复选框和单选按钮等样式

唯一的问题是我不能再使用onClick事件,因为实际的框会被一个带有自定义无线电元素的图像覆盖

javascript确实更改了单选按钮,但我似乎找不到检测更改的方法

目前,我尝试了以下方法:

    Event.observe(window, 'load', function() {
    $('startquestion').observe('change', set_startanswer(this.value));  
});
HTML:


“.$startq[‘问题’]”

不过,它似乎不起作用

有人能帮我吗

干杯!
Danny

您正在使用的脚本隐藏了原始复选框,并显示了上面的一些自定义图形。它注册在图形上的点击并相应地设置隐藏复选框-但是通过编程设置复选框状态不会触发更改事件

为了解决这个问题,您可能可以显式地捕获自定义图形上的单击(脚本创建一个包装
p
元素)。使用上面的代码行:

Event.observe(window, 'load', function() {
    var startquestionElement = $('startquestion');
    var startquestionState = startquestionElement.checked;
    startquestionElement.up().observe('click', function() {
        if (startquestionElement.checked != startquestionState) {
            startquestionState = startquestionElement.checked;
            set_startanswer(startquestionElement.value); // are you sure you want to use the element's value and not it's checked state?
        }
    });  
});
另一种选择是使用计时器全局观察复选框状态,并检查,例如每100毫秒检查一次:

Event.observe(window, 'load', function() {
    var startquestionElement = $('startquestion');
    var startquestionState = startquestionElement.checked;
    var observingInterval = setInterval(function() {
        if (startquestionElement.checked != startquestionState) {
            // If you want to stop observing after the checkbox has changed it's state once,
            // uncomment the following line:
            // clearInterval(observingInterval);
            startquestionState = startquestionElement.checked;
            set_startanswer(startquestionElement.value); // are you sure you want to use the element's value and not it's checked state?
        }
    }, 100);  
});
您可以使用后一个版本在一个观察函数调用中检查多个复选框。

您可以包括from,然后直接在image元素上触发本机单击事件

$('id_of_button').simulate('click');

观察收音机列表上的更改事件的最简单方法:

Form.getInputs('form','radio','radio_name').find(function(radio){

            Event.observe(radio, 'change', function() {

              //do whatever on this change

            });

        });

例如,我们是否假设您尝试了
change
事件?如果你有,而且它没有被解雇,我可以恭敬地建议使用另一种机制来设计单选按钮和复选框吗?是的,我有。虽然我对原型还不熟悉(实际上是JS)。我已经更新了这个问题
Form.getInputs('form','radio','radio_name').find(function(radio){

            Event.observe(radio, 'change', function() {

              //do whatever on this change

            });

        });