的style.display ="无"表现得很奇怪 - 我没有覆盖什么基础?

时间:2014-05-13 17:33:02

标签: javascript xpages

我有一对字段(BillingServicesDD& BillingServicesFF)。应该显示一个或另一个,具体取决于" SpreadSheet"领域。在我的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";
    };
}

SpreadSheet和BillingServicesDD都是组合框。 SpreadSheetDSP和BillingServicesFF都是inputTexts。 SpreadSheet和SpreadSheetDSP都指向FInvoiceDoc.Spreadsheet。我使用这种方法而不是可见/渲染方法,因为我需要表单上的所有这些值可用于表单的其他部分。当我不想让他们看到时,我只是不想显示所选的那些甚至占用房地产。

在大多数情况下,这很有效。我的问题是,如果我在保存表单时遇到某种验证错误,那么BillingServicesDD& FF显示。如果表单上的错误消息字段由我编写的服务器端验证例程设置,则稍后在onClientLoad事件中会出现验证错误消息并带有警告语句。

字段显示在onClientLoad事件和警告消息中一直是正确的(它是onClientLoad事件中发生的最后一件事)。之后的某个时间,当文档似乎重新显示时,两个字段都会出现。 (顺便说一句,这次重新显示似乎没有再次通过onClientLoad事件。)

由于这是所有客户端代码,我通过IE的调试器运行它。那里发生了一些奇怪的事。所有的代码都应该运行,但是当我一路走来时(即使通过所有bizzar not-my-code的东西),它说我需要重新提交文档,然后陷入循环,我不断得到我的警报错误消息。我必须杀死IE。

如果我关闭了调试器,则此循环不会发生。

1 个答案:

答案 0 :(得分:1)

你需要改变你的方法。删除尝试隐藏OnLoad事件中的字段的代码。 我假设你没有使用render属性(它不会首先发送字段),因为你需要在某些计算中使用它。

转到该字段的所有属性面板,找到样式属性并输入计算可见性或显示属性的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>

希望有所帮助