Прототип, слушая изменения в переключателях - PullRequest
0 голосов
/ 17 января 2012

Я искал решение в течение нескольких дней для этого, поэтому я надеюсь, что вы можете помочь.

Я использую пользовательские элементы формы от Райана Фейта, которые позволяют стилизовать флажки, переключатели и т. Д..

Единственная проблема в том, что я больше не могу использовать события onClick, так как фактическое поле перезаписывается символами для пользовательских радиоэлементов.

Javascript действительно меняет радиокнопки, но я не могу найти способ обнаружить изменения ..

В настоящее время я пробовал это:

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

HTML:

    <p>
<input type="radio" class="styled" name="startanswer" id="startquestion" value="'.$startq['id'].'" onclick="if (this.checked == true) { set_startanswer(this.value); }"'.$s.'> <span id="startanswertext'.$startq['id'].'">'.$startq['question'].'</span>
    </p>

Хотя, похоже, это не работает.

Кто-нибудь может мне помочь?

Приветствия!Дэнни

Ответы [ 3 ]

1 голос
/ 17 сентября 2012

Самый простой способ наблюдать за изменением в списке радио:

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

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

              //do whatever on this change

            });

        });
0 голосов
/ 19 января 2012

Вы можете включить event.simulate.js из protolicious , а затем запустить собственное событие щелчка по элементу изображения напрямую.

$('id_of_button').simulate('click');
0 голосов
/ 17 января 2012

Используемый сценарий скрывает исходные флажки и отображает некоторые пользовательские графические элементы выше. Он регистрирует щелчки на графике и соответственно устанавливает скрытый флажок - но программная установка состояний флажка не вызовет события изменения.

Чтобы обойти эту проблему, вы, вероятно, можете явно отлавливать щелчки на пользовательской графике (сценарий создает элемент обтекания 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);  
});

Вы можете использовать последнюю версию для проверки наличия нескольких флажков в одном вызове функции наблюдения.

...