2013-06-06 2 views
3

Изменение значения radioButton с использованием setAttribute ('checked', true) изменяет значение переключателя, но не запускает событие изменения.В AlloyUI (или YUI3, я полагаю), как я могу вызвать событие изменения при проверке переключателя с помощью setAttribute?

Это не похоже на YUI или AlloyUI (см., Например, Detecting a change in radio button/checkbox state).

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

Как это сделать в пользовательском интерфейсе сплава (я использую Liferay 6.1 GA2)?

Благодаря Alain

Некоторые особенности:

HTML-:

<aui:input type="radio" label="${viewMenuItem.label}" value="${viewMenuItem.value}" 
    id="${messageWallDisplay.newMessageOptionName}${viewMenuItem.value}" 
    name="${messageWallDisplay.newMessageOptionName}" data="${viewMenuItem.dataMap}" 
    checked="${viewMenuItem.value == messageWallDisplay.newMessageOptionDefaultValue}"/> 

событие установки делегации (я также попытался обратного вызова событий на радиокнопок):

messageTypeRadioGroup.delegate('change', function (event){ 
    var option = event.currentTarget; 
    if (option.get("checked")==true){ 
     showHideUserSelection(option); 
    } 
    }, 'input[type=radio]'); 

Атрибут setAttribute, который не вызвать событие изменения:

MWC.newMessageDefaultOption.setAttribute('checked',true); 

ответ

2

Этот ответ здесь выглядит как то, что вы пытаетесь достичь: Javascript: simulate a click on a link

Если MWC.newMessageDefaultOption ваш узел радио, вы можете просто сделать что-то вроде этого:

MWC.newMessageDefaultOption.simulate('change'); 

Как отмечено в комментарии Simulate для тестирования. Для лучшей практики:

var doThingsOnChangeFunc = function(arg1, arg2) { 
    // do things! 
} 

myNode.on(
    'change', 
    function(event) { 
     var arg1 = event.currentTarget; 
     var arg2 = "something"; 

     doThingsOnChange(arg1, arg2); 
    } 
); 

Тогда позже, когда вы программно изменить свой радио кнопка \ Флажок

myNode.setAttribute('checked', true); 

doThingsOnChange(arg1, arg2); 
+0

Я не мог заставить это работать, событие изменения все равно не будет срабатывать. Я задаюсь вопросом, связано ли это с имитацией разработки для целей тестирования и yahoo [предупреждение против использования этого кода пользователя] (http://yuilibrary.com/yui/docs/event/simulate.html#faking). –

+0

Интересно, я не читал достаточно близко. Но лучшим вариантом было бы просто вызвать метод, который также обрабатывает ваше событие изменения. См. Мой обновленный ответ. –

+0

Это на самом деле то, что я закончил делать. Благодаря ! –

0

Я в конечном итоге рефакторинга кода, заменяя переменную MWC.newMessageDefaultOption с помощью обратного вызова: функция который выбирает переключатель по умолчанию и выполняет те же действия, что и в обработчике событий.

0

Пожалуйста, попробуйте ниже код,

var allRadios = A.all("input[type='radio']"); 
     allRadios.on('change', function(e) { 
      var portletNamespace='<portlet:namespace/>'; 
      var selectedRadioButtonValue = e.currentTarget.get('value'); 
      // add your custom code here 
    }); 

Над кодом события изменения Прибавьте к радио-кнопки и, когда происходит событие изменения он будет выполнять код внутри функции.

Пожалуйста, дайте мне знать, если вам нужно больше ничего

+0

Спасибо Pritesh. У меня больше нет исходного кода (так как я реорганизовал все это), но попробую ваш код. Конечно, это будет полезно в более позднее время. –

+0

Я пробовал этот код и не мог заставить его работать. Изменение проверенного состояния с помощью кода не вызывает событие изменения. –