动态使用部分来管理字段

时间:2013-06-05 17:12:04

标签: javascript dynamics-crm-2011

我有一个标签,其中包含大量(20+)字段占用的部分。它们都是复选框,其中一个是“N / A”选项。任何人都可以建议一种简单的方法来编写javascript,确保至少做出一个选择,如果没有,只有当用户勾选N / A时,才让用户继续通过这一部分。我试图避免检查每个复选框中的值。有什么建议吗?

由于

2 个答案:

答案 0 :(得分:1)

从用户界面的角度来看,您可以将该部分拆分为两个部分(没有标题标签,因此它看起来像一个部分)。第一个将具有N / A复选框,如果选中,则Javascript将仅隐藏包含所有其他复选框的部分。

如果您确实想要检查值,您仍然可以使用相同的概念,但使用jQuery查找该部分中的所有复选框以及所有常规复选框。如果未选中任何一个,如果还未选中N / A,则可以停止保存并显示错误消息。

答案 1 :(得分:1)

我认为这只是使用Xrm.Page对象中的一些现有函数的情况,有一对可以同时处理大量属性。无论你如何做,你都必须检查每个领域,但你可以非常简洁地完成。

我建议添加一个OnSave事件,代码可以这样做:

//we want to make sure that at least one of these is populated
//new_na is the na field
//the others are the possible choices
var requiredFields = ["new_na", "new_field1", "new_field2", "new_field3"];

//this loops through every attribute on the page
Xrm.Page.data.entity.attributes.forEach(function (attribute, index) {

    //this will track if at least one field was set
    bool atLeastOneSet = false;

    //see if the requiredFields array contains this field
    if (requiredFields.indexOf(attribute.getName()) != -1) {

        //if it is required, check the value
        if(attribute.getValue()) {

            //if it set update the bool flag
            atLeastOneSet = true;
        }
    }

    //finished processing all fields, if atLeastOneSet is false no field has been set
    if(!atLeastOneSet) {

        //If this code is used in an on save event this will prevent the save
        Xrm.Page.context.getEventArgs().preventDefault();

        //Give the user some message
        alert("At least one field must be populated");
    }
});

未经测试的代码,但希望能让您对如何进展有所了解。