Liferay 在AlloyUI(我想是YUI3)中,当使用setAttribute检查单选按钮时,如何触发更改事件?

Liferay 在AlloyUI(我想是YUI3)中,当使用setAttribute检查单选按钮时,如何触发更改事件?,liferay,liferay-6,alloy-ui,Liferay,Liferay 6,Alloy Ui,使用setAttribute('checked',true)更改单选按钮的值会更改单选按钮的值,但不会触发更改事件 这似乎并不局限于YUI或AlloyUI(参见示例) 为了解决这个问题,我想在设置单选按钮的值时以编程方式触发一个更改事件 如何在Alloy UI中做到这一点(我使用的是Liferay 6.1 GA2) 谢谢 阿兰 一些细节: html: <aui:input type="radio" label="${viewMenuItem.label}" value="${viewMen

使用setAttribute('checked',true)更改单选按钮的值会更改单选按钮的值,但不会触发更改事件

这似乎并不局限于YUI或AlloyUI(参见示例)

为了解决这个问题,我想在设置单选按钮的值时以编程方式触发一个更改事件

如何在Alloy UI中做到这一点(我使用的是Liferay 6.1 GA2)

谢谢 阿兰

一些细节:

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}"/>
不触发更改事件的setAttribute:

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

这里的答案看起来像是你想要实现的:

如果
MWC.newMessageDefaultOption
是您的无线节点,您可以执行如下操作:

MWC.newMessageDefaultOption.simulate('change');
如注释中所述,模拟用于测试目的。最佳做法:

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);

我最终重构了代码,用回调替换了MWC.newMessageDefaultOption变量:一个选择默认单选按钮并执行与事件处理程序中相同后续操作的函数。

请尝试下面的代码

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
    });
var-allRadios=A.all(“输入[type='radio']”);
所有收音机打开(‘更改’,功能(e){
var portletNamespace='';
var selectedRadioButtonValue=e.currentTarget.get('value');
//在此处添加自定义代码
});
上面的代码将更改事件添加到所有单选按钮,当更改事件发生时,它将在函数内部执行代码


如果您还需要什么,请告诉我

我无法使其正常工作,更改事件仍然不会触发。我想知道这是否与出于测试目的而开发的simulate和yahoo有关。有趣的是,我没有仔细阅读。但最好的选择是只调用同时处理更改事件的方法。看看我最新的答案。这就是我最后做的。谢谢谢谢你,普里特斯。我不再有初始代码(因为我重构了整个过程),但会尝试您的代码。以后肯定会派上用场的。我尝试了此代码,但无法使其正常工作。通过代码更改已检查状态不会触发更改事件。
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
    });