Javascript CSJS没有';t更新由SSJS设置的属性

Javascript CSJS没有';t更新由SSJS设置的属性,javascript,xpages,Javascript,Xpages,以下是更改事件CSJS上的(是/否)单选按钮,它禁用/启用另一个“inputOtherRadio”单选按钮。它工作得非常完美: rObj = dojo.query("[id$=':inputOtherRadio']"); if(thisEvent.target.value=="Y"){ rObj.disabled = true; } else { rObj.disabled = false; } 但是如果我将xPage'inputOtherRadio'component Dis

以下是更改事件CSJS上的(是/否)单选按钮,它禁用/启用另一个“inputOtherRadio”单选按钮。它工作得非常完美:

rObj = dojo.query("[id$=':inputOtherRadio']");
if(thisEvent.target.value=="Y"){
    rObj.disabled = true;
} else {
    rObj.disabled = false;
}
但是如果我将xPage'inputOtherRadio'component Disable property=true设置为true,那么上面的代码就不起作用了(它不可撤销…)



如何使CSJS代码适用于禁用的组件?

将第一个单选按钮中的CSJS代码更改为

<xp:radioGroup id="mainRadio" defaultValue="N">
    <xp:selectItem itemLabel="Yes" itemValue="Y"></xp:selectItem>
    <xp:selectItem itemLabel="No" itemValue="N"></xp:selectItem>
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[return false;]]></xp:this.script>
    </xp:eventHandler>
    <xp:eventHandler event="onchange" submit="false">
        <xp:this.script><![CDATA[
            options = dojo.query("[name$=inputOtherRadio]");
            for(i=0; i < options.length; i++) {
                if(thisEvent.target.value=="N"){    
                   options[i].disabled = true;
                } else {
                   options[i].disabled = false;
                }
            }
        ]]></xp:this.script>
    </xp:eventHandler>
</xp:radioGroup>

单选按钮控件被渲染为


正如您所看到的,disabled属性被分配给输入元素“Yes”和“No”,而不是整个单选按钮控件。这就是为什么必须为每个选项设置disabled属性

仅仅是解释,但它可能会帮助你或某人找到答案。我怀疑,由于无线电组的
disabled
属性设置为
true
,因此它最初会作为disabled传递给浏览器。CSJS代码本身仍在工作,但eventHandler不会触发,因为该组件已禁用,因此不应单击。在我的示例中,它确实可以工作。请检查呈现的输入标记的ID,并确保使用与我的代码中相同的语法设置inputYes。。。。代码必须在
中,以便在呈现给客户端之前,在服务器端替换
{id:inputOtherRadio}
。复制了您的示例,它对我来说确实有效,没有任何更改。您使用的是哪个版本?我的Domino服务器是9.0.1 FP5ah。。我忘了。。这是8.5:(酷..那很好..非常感谢克努特
<xp:radioGroup id="mainRadio" defaultValue="N">
    <xp:selectItem itemLabel="Yes" itemValue="Y"></xp:selectItem>
    <xp:selectItem itemLabel="No" itemValue="N"></xp:selectItem>
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[return false;]]></xp:this.script>
    </xp:eventHandler>
    <xp:eventHandler event="onchange" submit="false">
        <xp:this.script><![CDATA[
            options = dojo.query("[name$=inputOtherRadio]");
            for(i=0; i < options.length; i++) {
                if(thisEvent.target.value=="N"){    
                   options[i].disabled = true;
                } else {
                   options[i].disabled = false;
                }
            }
        ]]></xp:this.script>
    </xp:eventHandler>
</xp:radioGroup>