我有3个静态numberfields,并且正在numberfields中创建更多的CodeBehind。我想要的是将所有sum的值的numberfields限制为100。

这是静态numberfields

<ext:NumberField ID="numS1" runat="server" MinValue="0" MaxValue="100" FieldLabel="numS1" />
<ext:NumberField ID="numS2" runat="server" MinValue="0" MaxValue="100" FieldLabel="numS2" />
<ext:NumberField ID="numS3" runat="server" MinValue="0" MaxValue="100" FieldLabel="numS3" />


这是在后面的代码中创建的动态numberfields

foreach (var v in visits)
{
    NumberField nf = new NumberField();
    nf.ID = v.VISID + "num";
    nf.MaxValue = 100;
    nf.MinValue = 0;
    nf.FieldLabel = v.VISID;
    PerVisitFS.Items.Add(nf);
    nf.Render();
}


我试图做的是使用hidden字段#{sum100}并为dynamic字段在listener事件上创建blur

nf.Listeners.Blur.Handler = "#{sum100}.setValue(Number(this.getValue()) + Number(#{sum100}.getValue()));";


在按钮Beforeclick事件上,我添加了以下代码:

Before="#{sum100}.setValue(Number(#{sum100}.getValue()) + Number(#{numS1}.getValue()) + Number(#{numS2}.getValue()) + Number(#{nums#}.getValue()));
if ( #{sum100}.getValue() > 100)
{ alert('sum is > 100 : ' + #{sum100}.getValue());
     #{sum100}.setValue(0);
     return false;
}
else
{alert('sum is : ' + #{sum100}.getValue())}">


但是这种方法的问题在于,当我第一次输入一些值时,它可以工作,但是如果我尝试更新dynamic字段,则它将仅使用更新的numberfieldstatic来计算总和。没有其他dynamic

发生这种情况是因为未更改的blur dynamic中未触发numberfields事件

最佳答案

您可以将其放在“ Before”上,然后执行以下操作:

            var numOfNumFields = 3; //increase as necessary, it could came from a hidden field

            var sum = 0;
            for ( var i = 0; i< numOfNumFields;i++){

               sum += Ext.getCmp('numS'+i).getValue();
            }
            if (sum > 100)
            {
                alert('sum is > 100 : ' + sum);
                return false
            }
            else
            {
                alert('sum is : ' + sum);
                return true;
            }

08-05 14:52