3

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

这似乎不限于 YUI 或 AlloyUI(例如,请参阅Detecting a change in radio button/checkbox state)。

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

我如何在 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}"/>

事件委托设置(我还尝试了单选按钮上的事件回调):

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

不触发 change 事件的 setAttribute:

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

3 回答 3

2

这里的答案看起来像您要完成的工作:Javascript:模拟点击链接

如果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);
于 2013-06-06T23:10:46.193 回答
0

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

于 2013-06-07T04:33:56.833 回答
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
    });

上面的代码将更改事件添加到所有单选按钮,当更改事件发生时,它将执行函数内的代码。

如果您需要更多信息,请告诉我

于 2013-06-11T08:33:24.733 回答