Javascript CQ5对话框不工作

Javascript CQ5对话框不工作,javascript,extjs,aem,Javascript,Extjs,Aem,我正在学习CQ5,我一直在创建对话框验证。我的JavaScript在clientlibs文件夹中,我正在使用侦听器调用该函数,但它没有被调用。我看不出有任何证据 如果提供了相应的ID,我试图使URL字段成为必需字段 下面是我的JS代码 var fieldsetCheck = {}; fieldsetCheck.chkBlankFields = function chkBlankFields(panel) { var fieldSets = panel.findByType('dia

我正在学习CQ5,我一直在创建对话框验证。我的JavaScript在clientlibs文件夹中,我正在使用侦听器调用该函数,但它没有被调用。我看不出有任何证据

如果提供了相应的ID,我试图使URL字段成为必需字段

下面是我的JS代码

var fieldsetCheck = {};

fieldsetCheck.chkBlankFields  = function chkBlankFields(panel) {

    var fieldSets = panel.findByType('dialogfieldset');
    var fLength = fieldSets.length;

    for (var i = 0; i < fLength; i++) {
        var fieldSet = fieldSets[i];
        var Id = panel.getComponent('Id'+(i++));
        var Url = panel.getComponent('Url'+(i++)); 

        if(Id.getValue().trim() !== ""||Url.getValue().trim()!=="") { 
            campId.allowBlank = false;
            campUrl.allowBlank = false;
        } else {
            campId.allowBlank = true;
            campUrl.allowBlank = true;
        }
    }    
}
var fieldsetCheck={};
fieldsetCheck.chkBlankFields=功能chkBlankFields(面板){
var fieldset=panel.findByType('dialogfieldset');
var fLength=fieldset.length;
对于(变量i=0;i
这是我的dialog.xml

<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"zzzmlns:jcr="http://www.jcp.org/jcr/1.0" jcr:primaryType="cq:Dialog" height="500" id="textNavEditDialog" title="Test Configuration Dialog" width="600" xtype="dialog">
    <items jcr:primaryType="cq:WidgetCollection">
        <tabs jcr:primaryType="cq:TabPanel" activeTab="{Long}0" title="Test Configuration" xtype="tabpanel">
            <items jcr:primaryType="cq:WidgetCollection">
                <campaigns jcr:primaryType="cq:Widget" title="Links" xtype="panel">
                    <items jcr:primaryType="cq:WidgetCollection">
                            <fieldsetDialog1 jcr:primaryType="cq:Widget" xtype="dialogfieldset" border="{Boolean}true" collapseFirst="{Boolean}true" collapsed="{Boolean}false" collapsible="{Boolean}false"  hideLabel="{Boolean}false" id="fieldset1">
                                <items jcr:primaryType="cq:WidgetCollection">

                                    <Id1 jcr:primaryType="cq:Widget" fieldDescription="Enter segment only (exclude seg=)" fieldLabel="Segment Number 1" allowBlank="{Boolean}false" maxLength="12" name="./sc:Id1" nanText="Please enter a numeric value" xtype="numberfield" ItemId ="Id1"/>
                                    <Url1 jcr:primaryType="cq:Widget" fieldDescription="Path to Campaign 1" fieldLabel="Campaign URL 1" allowBlank="{Boolean}false" name="./sc:Url1" predicate="hierarchy" suffix="/_jcr_content/par.html" typeAhead="{Boolean}false" xtype="pathfield" ItemId ="Url1"/>
                                </items>
                            </fieldsetDialog1>

                            <fieldsetDialog2 jcr:primaryType="cq:Widget" xtype="dialogfieldset" border="{Boolean}true" collapseFirst="{Boolean}true" collapsed="{Boolean}false" collapsible="{Boolean}false"  hideLabel="{Boolean}false" id="fieldset2">
                                <items jcr:primaryType="cq:WidgetCollection">

                                    <Id2 jcr:primaryType="cq:Widget" fieldDescription="Enter segment only (exclude seg=)" fieldLabel="Segment Number 2" maxLength="12" name="./sc:Id2" nanText="Please enter a numeric value" xtype="numberfield" ItemId ="Id2"/>
                                    <Url2 jcr:primaryType="cq:Widget" fieldDescription="Path to Campaign 2" fieldLabel="Campaign URL 2" name="./sc:Url2" predicate="hierarchy" suffix="/_jcr_content/par.html" typeAhead="{Boolean}false" xtype="pathfield" ItemId = "Url2" />
                                </items>

                            </fieldsetDialog2>

                            <fieldsetDialog3 jcr:primaryType="cq:Widget" xtype="dialogfieldset" border="{Boolean}true" collapseFirst="{Boolean}true" collapsed="{Boolean}false" collapsible="{Boolean}false"  hideLabel="{Boolean}false" id="fieldset3">
                                <items jcr:primaryType="cq:WidgetCollection">

                                    <Id3 jcr:primaryType="cq:Widget" fieldDescription="Enter segment only (exclude seg=)" fieldLabel="Segment Number 3" maxLength="12" name="./sc:Id3" nanText="Please enter a numeric value" xtype="numberfield" ItemId ="Id3" />
                                    <Url3 jcr:primaryType="cq:Widget" fieldDescription="Path to Campaign 3" fieldLabel="Campaign URL 3" name="./sc:Url3" predicate="hierarchy" suffix="/_jcr_content/par.html" typeAhead="{Boolean}false" xtype="pathfield" ItemId ="Url3"/>
                                </items>
                            </fieldsetDialog3>
                    </items>
                    <listeners jcr:primaryType="nt:unstructured" beforesubmit="function(this) { fieldsetCheck.chkBlankFields(this);}" />
                </campaigns>
            </items>
        </tabs>
    </items>
</jcr:root>

xtype没有beforesubmit事件。该事件仅适用于xtype。侦听器必须是对话框节点的子节点


该函数将以对话框作为参数而不是面板来调用。由于您在函数中使用findByType()方法,因此它仍然可以工作,只需将变量重命名为dialog以提高可读性即可,在递增id和url时存在问题,因为在两个语句中都有i++在每次迭代中导致2个额外增量,所以在第二次迭代中,值将是3而不是1,依此类推。因此,我建议使用以下代码

  for (var i = 0; i < fLength; i++) 
  {
        var fieldSet = fieldSets[i];
        var Id = panel.getComponent('Id'+(i + 1));
        var Url = panel.getComponent('Url'+(i + 1)); 

        if(Id.getValue().trim() !== ""||Url.getValue().trim()!=="")
        { 
            campId.allowBlank = false;
            campUrl.allowBlank = false;
        } 
        else 
        {
            campId.allowBlank = true;
            campUrl.allowBlank = true;
        }
  }
for(变量i=0;i
JavaScript不是Java,所以我已经从你的帖子中删除了标签。谢谢!!!虽然CQ5有Java框架及其相关功能,但遗憾的是,没有得到这一部分“只是将变量重命名为dialog,以便于可读。”@maddy因为变量实际上引用的是对话框而不是面板,所以最好将其称为dialog。如果其他人试图维护我根据您的评论尝试过的代码,可能会让他们感到困惑,这表明l.fireFn.apply不是一个函数错误。请guide@maddy,panel.getComponent('Id'+(i++);结果是Id0。将其更改为panel.getComponent('Id'+(i+1));