有条件的必填字段

时间:2015-10-14 09:16:06

标签: javascript php sugarcrm suitecrm

我的模块中有两个字段:rules_name_c,它是一个文本字段,rules_author_c是一个关联字段。

这些字段不是必填字段,但是当我在rules_name_c字段中输入数据时,我想这样做,因此必须填写rules_author_c才能完成记录。

我尝试了以下内容:

<?php
$dependencies['conn_connection']['required_author'] = array(
    'hooks' => array("edit"),
    'trigger' => 'true', //Optional, the trigger for the dependency. Defaults to 'true'.
    'triggerFields' => array('rules_name_c'),
    'onload' => true,
    //Actions is a list of actions to fire when the trigger is true
    'actions' => array(
        array(
            'name' => 'SetRequired',
            //The parameters passed in will depend on the action type set in 'name'
            'params' => array(
                'target' => 'rules_author_c',
                'label'  => 'rules_author_c_label',
                'value' => 'not(equal($rules_name_c, ""))',
            ),
        ),
    ),
);
?>

我相信这个解决方案不起作用,因为这仅在编辑记录时起作用。这是对的吗?

我也尝试过使用:

<?php

require_once('include/MVC/View/views/view.edit.php');
/*
 * replace UT_Blogs with the module your are dealing with 
 */

class conn_connectionViewEdit extends ViewEdit {

    public function __construct() {
        parent::ViewEdit();
        $this->useForSubpanel = true; // this variable specifies that these changes should work for subpanel
        $this->useModuleQuickCreateTemplate = true; // quick create template too
    }

    function display() {

        global $mod_strings;
        //JS to make field mendatory 
        $jsscript = <<<EOQ
                   <script>
                       // Change rules_author_c to the field of your module
                       $('#rules_name_c').change(function() {
                            makerequired(); // onchange call function to mark the field required
                       });
                     function makerequired()
                     {
                        var status = $('#rules_name_c').val(); // get current value of the field 
                         if(status != ''){ // check if it matches the condition: if true,
                                addToValidate('EditView','rules_author_c','varchar',true,'{$mod_strings['LBL_RULES_AUTHOR']}');    // mark rules_author_c field required
                                $('#description_label').html('{$mod_strings['LBL_RULES_AUTHOR']}: <font color="red">*</font>'); // with red * sign next to label
                            }
                            else{
                                removeFromValidate('EditView','rules_author_c');                        // else remove the validtion applied
                                $('#rules_author_c_label').html('{$mod_strings['LBL_RULES_AUTHOR']}: '); // and give the normal label back 
                            }
                    }
                    makerequired(); //Call at onload while editing a Published blog record
                </script>
EOQ;
        parent::display();
        echo $jsscript;     //echo the script
    }

}

1 个答案:

答案 0 :(得分:1)

我写了这个javascript函数,后来我用它与jQuery:

function lxValidateCRMfield(form_name, field_name, label, validate, fnCallerName = "") {
    fnCallerName = (fnCallerName != "") ? "(Function " + fnCallerName + ")" : "";
    if (validate) {
        console.log("lxValidateCRMfield adding validation on form " + form_name + " to field " + field_name, fnCallerName);
        //addToValidate is defined somewhere on suitecrm
        addToValidate(form_name, field_name, 'varchar', true, "Falta campo requerido: " + label);
        $('#' + field_name + '_label').html(label + ': <font color="red">*</font>');
    } else {
        console.log("lxValidateCRMfield removing validation on form " + form_name + " to field " + field_name, fnCallerName);
        //removeFromValidate is defined somewhere on suitecrm
        removeFromValidate(form_name, field_name);
        $('#' + field_name + '_label').html(label + ': ');
    }
}

然后你在你需要的表格上调用它(使用你的字段看起来像这样):

// List all forms available
console.log(document.forms);
// select one you need
var form_name = 'EditView';  eg: EditView, DetailView, search_form
var module = 'YourModule'; // eg: Opportunities

var crmEditView = document.forms[form_name];
if (crmEditView.module.value == module) {
    if ($('#rules_name_c').val() != '') {
        lxValidateCRMfield(form_name, 'rules_author_c', 'Author', true, 'optionalNameOfFunctionYourCallingThis');
    } else {
        lxValidateCRMfield(form_name, 'rules_author_c', 'Author', false, 'optionalNameOfFunctionYourCallingThis');
    }
}

我希望它有所帮助 此致