Javascript style.display=";无”;代理维德-我没有覆盖什么基础?

Javascript style.display=";无”;代理维德-我没有覆盖什么基础?,javascript,xpages,Javascript,Xpages,我有一对字段(BillingServicesDD和BillingServicesFF)。应根据“电子表格”字段的值显示一个或另一个。在onClientLoad事件中,我执行以下操作: // Set up field hide-when on loading. spreadSheetVis(); . (other cool, but unrelated code) . } 我的spreadSheetVis()例程如下所示 // set the visibility of our billings

我有一对字段(BillingServicesDD和BillingServicesFF)。应根据“电子表格”字段的值显示一个或另一个。在onClientLoad事件中,我执行以下操作:

// Set up field hide-when on loading.
spreadSheetVis();
.
(other cool, but unrelated code)
.
}
我的spreadSheetVis()例程如下所示

// set the visibility of our billingservices selection depending on what we
// selected in the spreadsheet value.
function spreadSheetVis() {

  var em = XSP.getElementById("#{id:editMode}");
  if ( em == undefined ) {
    var ss = XSP.getElementById("#{id:SpreadSheetDsp}").innerHTML;
    } else {
    var ss = XSP.getElementById("#{id:Spreadsheet}").value;
    };
  if ( ss === "Compliance") {
    XSP.getElementById("#{id:BillingServicesDD}").style.display = "inline";
    XSP.getElementById("#{id:BillingServicesFF}").style.display = "none";
    } else {
    XSP.getElementById("#{id:BillingServicesDD}").style.display = "none";
    XSP.getElementById("#{id:BillingServicesFF}").style.display = "inline";
    };
}
电子表格和BillingServicesDD都是组合框。电子表格DSP和BillingServicesFF都是输入文本。电子表格和电子表格都指向FInvoiceDoc.SpreadSheet。我使用这种方法而不是可见/渲染方法,因为我需要表单上的所有这些值对表单的其他部分可用。我只是不想看到选中的照片,甚至不想在我不想看到的时候占用房地产

在大多数情况下,这非常有效。我的问题是,如果在保存表单时出现某种验证错误,则会同时显示BillingServicesDD和FF。如果表单上的错误消息字段是由我编写的服务器端验证例程设置的,则稍后在OnClient Load事件中会出现验证错误消息,并显示一条警报语句

通过OnClient Load事件和警报消息(这是OnClient Load事件中发生的最后一件事),字段显示始终正确。当文档重新显示时,两个字段都会出现。(顺便说一句,此重新显示似乎不会再次通过OnClient Load事件。)

因为这都是客户端代码,所以我通过IE的调试器运行它。那里发生了奇怪的事情。所有的代码都按它应该的方式运行,但是当我一步步执行时(即使是通过所有那些不是我的代码的东西),它说我需要重新提交文档,然后陷入一个循环中,我不断地收到我的警报错误消息。那我就得杀了他


如果我关闭了调试器,这个循环就不会发生。

你需要改变你的方法。删除试图从OnLoad事件中隐藏字段的代码。 我假定您没有使用渲染属性(它一开始不会发送字段),因为在某些计算中需要它

转到字段的“所有特性”面板,找到“样式”特性,然后输入计算可见性或显示特性的SSJS表达式

将计算放在那里将经受任何刷新

样本:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:checkBox text="Control on" id="editMode"
        value="#{viewScope.editMode}" checkedValue="true"
        uncheckedValue="false" defaultChecked="true">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="SpreadSheetDsp">
        </xp:eventHandler>
    </xp:checkBox>

    <xp:table style="width:100.0%" id="SpreadSheetDsp">
        <xp:tr style="background-color : #FFBBBB">
            <xp:this.rendered><![CDATA[#{javascript:"false" != viewScope.editMode;}]]></xp:this.rendered>
            <xp:td>Visible</xp:td>
            <xp:td>when checked</xp:td>
        </xp:tr>
        <xp:tr style="background-color : #BBBBFF">
        <xp:this.rendered><![CDATA[#{javascript:"false" == viewScope.editMode;}]]></xp:this.rendered>
            <xp:td>Visible</xp:td>
            <xp:td>when unchecked</xp:td>
        </xp:tr>
    </xp:table>
</xp:view>

看得见的
检查时
看得见的
不检查时

希望帮助显示应该有一个值,例如inline、block、none等切换到“inline”相同的内容我错过了这一部分:“当文档重新显示时”您确定页面没有重新加载吗?重新加载当然会将它们重置回默认显示。您在调试器中看到的似乎表明,如果它是,它不会再次触发OnClient Load事件吗?这是命令。保存按钮(字段样式正确)->警告消息(字段样式仍然正确)->点击确定->表单重新显示。现在字段样式不正确。我不是有意地重新加载文档。我在“beforePageLoad”和“afterPageLoad”中有服务器端代码。我已经删除了对currentDocument进行任何更改的任何语句。仍然得到相同的结果。我不熟悉xpages,所以我不知道。我就是这么想的。您是否有更改字段样式属性的SSJS表达式示例?只是一些一般性的东西,给我指出正确的方向。我现在明白了。我决定使用styleClass。为具有if(currentDocument.getValue(“Compliance”){“xspHiddenFieldsDiv”}的字段使用了计算值,否则{“xspUnhideField”}添加了一个示例。这不会向下发送标记,除非您需要它,然后使用styleClass