none
在InfoPath 2007 中如何实现多个下拉列表级联动作,以存储省、市、区等地址数据?我的Jscript代码有问题,求高人指点。 RRS feed

  • 问题

  • /*
     * 此文件包含数据验证和表单级别事件的函数。
     * 由于在表单定义文件(.xsf)中引用了这些函数,
     * 因此建议不要修改函数名称,
     * 以及参数的名称和数目。
     *
    */
    // 下列行由 Microsoft Office InfoPath 创建,以便为主 XML 数据文件中的
    // 所有已知命名空间定义前缀。
    // 所有在 InfoPath 外部对表单模板文件所做的修改都
    // 不会自动更新。
    //<namespacesDefinition>
    XDocument.DOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-03-11T20:42:40" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');
    //</namespacesDefinition>
    //=======
    // 下列函数处理程序由 Microsoft Office InfoPath 创建。
    // 不要修改函数名称以及参数的名称和数目。 
    // 此函数与下列域或组(XPath)相关: /my:myFields/my:field1
    // 注意: 创建函数处理程序后不会更新此备注中的信息。
    //=======
    function msoxd_my_field1::OnAfterChange(eventObj)
    {
    // 在此处编写代码以还原全局状态。
    	if (eventObj.IsUndoRedo)
    		{
    			// 发生了撤消或恢复操作,并且 DOM 为只读。
    			return;
    		}
    // 发生了域更改,并且 DOM 可写。请在此处编写代码来响应更改。
        if((eventObj.Source.nodeType != 3) || (eventObj.Operation == "Delete"))
            return;
        
       
            var insertedChildNode;
            
            var i = 0;
                
            var nodeSelMove1 = XDocument.DOM.selectSingleNode("/my:myFields/my:group3/my:group4[1]");
            var nodeSelMove10 = XDocument.DOM.selectSingleNode("/my:myFields/my:group3/my:group4[10]");
                XDocument.View.SelectNodes(nodeSelMove1,nodeSelMove10);
            var objXMLNodesMove = XDocument.View.GetSelectedNodes(); 
            
            var nodeSelFixParent = XDocument.DOM.selectSingleNode("/my:myFields/my:group1");
            var nodeSelFixFirst = XDocument.DOM.selectSingleNode("/my:myFields/my:group1/my:group2[1]");
            
            //XDocument.View.EnableAutoUpdate();
            
            while (objXMLNodesMove(i).childNodes(1).text != "")
            {
              
                i++;  
            }
            
            var difference = i - nodeSelFixParent.childNodes.length + 2;
            
            if(difference > 0)
            {
                for(var i = 0; i < difference; i++)
                {
                    nodeSelFixMove = nodeSelFixFirst.cloneNode(true);
                    insertedChildNode = nodeSelFixParent.appendChild(nodeSelFixMove);
                }
            }
            else if (difference < 0)
            {    
                for(var i = 0; i > difference; i--)
                {
                    removedNode = nodeSelFixParent.removeChild(nodeSelFixParent.lastChild);    
                }
                
            }
            else
            {
            }
            
            
            var nodeSelFixEnd = XDocument.DOM.selectSingleNode("/my:myFields/my:group1/my:group2[last()]");
                XDocument.View.SelectNodes(nodeSelFixFirst,nodeSelFixEnd);
            var objXMLNodesFix = XDocument.View.GetSelectedNodes();
            for(var j = 0; j < i; j++)
            {
                objXMLNodesFix(j).childNodes(1).text = objXMLNodesMove(j).childNodes(1).text;
            }
            
    }
    //=======
    // 下列函数处理程序由 Microsoft Office InfoPath 创建。
    // 不要修改函数名称以及参数的名称和数目。 
    // 此函数与下列域或组(XPath)相关: /my:myFields/my:group1/my:group2
    // 注意: 创建函数处理程序后不会更新此备注中的信息。
    //=======
    function msoxd_my_group2::OnAfterChange(eventObj)
    {
    // 在此处编写代码以还原全局状态。
    	if (eventObj.IsUndoRedo)
        {
    		// 发生了撤消或恢复操作,并且 DOM 为只读。
    		return;
    	}
    // 发生了域更改,并且 DOM 可写。请在此处编写代码来响应更改。
        //if (eventObj.Site != eventObj.Parent)
        //{
            //return;
        //}
        
        
        var ii = 0;
        var nodeSelMove1_ = XDocument.DOM.selectSingleNode("/my:myFields/my:group3/my:group4[1]");
        var nodeSelMove10_ = XDocument.DOM.selectSingleNode("/my:myFields/my:group3/my:group4[10]");
            XDocument.View.SelectNodes(nodeSelMove1_,nodeSelMove10_);
        var objXMLNodesMove_ = XDocument.View.GetSelectedNodes(); 
            
        var nodeSelFixParent_ = XDocument.DOM.selectSingleNode("/my:myFields/my:group1");
        var nodeSelFixFirst_ = XDocument.DOM.selectSingleNode("/my:myFields/my:group1/my:group2[1]");
        
        while (objXMLNodesMove_(i).childNodes(1).text != "")
        {
            ii++;  
        }
        
        if (nodeSelFixParent.childNodes.length != ii + 2)
        {
            return;
        }
        
        var nodeSelFixEnd_ = XDocument.DOM.selectSingleNode("/my:myFields/my:group1/my:group2[last()]");
            XDocument.View.SelectNodes(nodeSelFixFirst_,nodeSelFixEnd_);
        var objXMLNodesFix_ = XDocument.View.GetSelectedNodes();
        for(var j = 0; j < i; j++)
        {
            objXMLNodesFix_(j).childNodes(1).text = objXMLNodesMove_(j).childNodes(1).text;
        }
    }
    //=======
    // 下列函数处理程序由 Microsoft Office InfoPath 创建。
    // 不要修改函数名称以及参数的名称和数目。 
    // 此函数与下列域或组(XPath)相关: /my:myFields/my:group1/my:group2/my:field3
    // 注意: 创建函数处理程序后不会更新此备注中的信息。
    //=======
    function msoxd_my_field3::OnAfterChange(eventObj)
    {
    // 在此处编写代码以还原全局状态。
    	if (eventObj.IsUndoRedo)
    	{
    		// 发生了撤消或恢复操作,并且 DOM 为只读。
    		return;
    	}
    // 发生了域更改,并且 DOM 可写。请在此处编写代码来响应更改。
        if((eventObj.Operation == "Insert") || (eventObj.Operation == "Delete"))
        {
            return;
        }
        
        //if (i != difference)
        //{
            //return;
        //}
            
        if (eventObj.Site != eventObj.Parent)
        {
            return;
        }
        
            
    }

    2012年4月13日 9:34