XPages radiobutton групповое событие onchange не работает

#javascript #xpages

#javascript #xpages

Вопрос:

Вот моя простая страница с элементом управления listbox, который должен обновлять свои значения в соответствии с выбором группы radiobutton. В качестве источника в окне списка используется массив переменных области видимости. Поэтому, когда я нажимаю на radiobutton, я хочу изменить значения в списке. Он работает после первого / второго щелчка, затем он не обновляет список, затем он снова работает. Что я делаю не так?

 <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:this.beforePageLoad><![CDATA[#{javascript:viewScope.MYARRAY = new Array();
viewScope.MYARRAY.push(["NAME1", "ID1"]);
viewScope.MYARRAY.push(["NAME2", "ID3"]);
viewScope.MYARRAY.push(["NAME3", "ID4"]);
viewScope.MYARRAY.push(["NAME4", "ID5"]);}]]>
</xp:this.beforePageLoad>

<xp:radioGroup id="radioGroupSortBy" defaultValue="0">
    <xp:selectItem itemLabel="by Name" itemValue="0"></xp:selectItem>
    <xp:selectItem itemLabel="by Id" itemValue="1"></xp:selectItem>
        <xp:eventHandler event="onchange" submit="true"
            refreshMode="partial" refreshId="listBox1">
        </xp:eventHandler>
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="listBox1">
        </xp:eventHandler>
</xp:radioGroup>

<xp:listBox id="listBox1" style="width:390.0px;height:166.0px">
    <xp:selectItems>
        <xp:this.value><![CDATA[#{javascript:var arr = new Array();
            for(var i=0; i<viewScope.MYARRAY.length; i  ){
                if(getComponent("radioGroupSortBy").getValue()==0){
                    arr.push(viewScope.MYARRAY[i][0]   " - "   viewScope.MYARRAY[i][1]);
                } else {
                    arr.push(viewScope.MYARRAY[i][1]   " - "   viewScope.MYARRAY[i][0]);
                }
            }
            return arr.sort();}]]>
        </xp:this.value>
    </xp:selectItems>
</xp:listBox>
</xp:view>
 

Ответ №1:

Ваш пример работает, если вы нажимаете на введите описание изображения здесьсамо радио, но «на один клик слишком поздно», если вы нажимаете на ярлык.

Это ошибка частичного обновления onClick с переключателями.

Добавьте следующий код CCJS в событие onClick:

     <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="listBox1">
        <xp:this.script><![CDATA[
            var e = arguments[0] || window.event;
            e = dojo.fixEvent(e);
            if (e.target.type != "radio") {
                e.preventDefault();
                dojo.query("input",e.target).forEach(function(inputNode){
                    dojo.attr(inputNode,"checked",!(dojo.attr(inputNode,"checked")));
                });
            }
            return true;
        ]]></xp:this.script>
    </xp:eventHandler>
 

Ответ №2:

События переключателей могут быть странными в некоторых браузерах (IE). Есть ли у вас этот параметр в вашем файле свойств xsp?

http://www-01.ibm.com/support/docview.wss?uid=swg21631834

Не используйте как onclick, так и on change.

Говард