Gform.addFilter中未定义的字段ID用于限制日期选择器-重力表单中的日期

时间:2018-07-14 作者:rmalviya

我已经在重力表单的条目详细信息编辑管理页面中的日期字段上添加了对日期选择器的支持。我只是让gform_datepicker_init 在中编写脚本admin_enqueue_scripts 钩这可以很好地工作,因为在条目详细信息编辑页面中默认情况下不可用的日期字段会显示日期选择器。

我的表单有其他要求,我想限制datepicker字段中的日期。因此,我想利用JS过滤器gform_datepicker_options_pre_init 由重力模板提供。当我尝试使用以下代码时,它被放入一个钩子函数中admin_enqueue_scripts, 这个fieldIdundefined 正如控制台日志所报告的,因此这不起作用:

// Allow past and current dates only
$custom_datepicker_init = "
jQuery(document).ready(function($) {
    gform.addFilter( \'gform_datepicker_options_pre_init\', function( optionsObj, formId, fieldId ) {
        // Apply to field 101 of form 1 only
        if(formId == 1 && fieldId == 101) {
            optionsObj.maxDate = 0;
        }
        console.log(\'formId: \' + formId + \', fieldId: \' + fieldId); // <--- fieldId is undefined
        return optionsObj;
    } );
});";
wp_add_inline_script( \'gform_datepicker_init\', $custom_datepicker_init, \'before\' );
我也尝试将此代码放入其他相关挂钩中,但没有成功。

有人请指导我为什么这里未定义fieldId,如果我需要将此代码放到其他挂钩中才能工作,请提出建议。

1 个回复
SO网友:rmalviya

调试后,我注意到formId 在filter的hooked函数中fieldId 用于日期字段,因此fieldId 未定义。

这里没有实际的formId 在hooked JS filter函数中接收到fieldId 传递为formId. 因此,我使用formId 仅为:

// Allow past and current dates only
$custom_datepicker_init = "
jQuery(document).ready(function($) {
    gform.addFilter( \'gform_datepicker_options_pre_init\', function( optionsObj, formId, fieldId ) {
        // Apply to field 101 of form 1 only
        // As this is nested form, so reports fieldId as formId and
        // leaving fieldId undefined, behave accordingly :)
        if(formId == 101) {
            optionsObj.maxDate = 0;
        }
        return optionsObj;
    } );
});";
wp_add_inline_script( \'gform_datepicker_init\', $custom_datepicker_init, \'before\' );
我认为,这种行为是由于Gravity Forms Nested Forms 以当前重力形式。希望它能在调试问题时帮助他人。

结束

相关推荐

Content hooks vs User hooks

这与其说是一个有直接答案的问题,不如说是一个理论问题。我一直在处理更新或删除帖子以及更新或删除用户时启动功能的不同操作。对于行动,publish_post 和before_delete_post 对于职位和personal_options_update, edit_user_profile_update 和delete_user 对于用户。通过更新后,您可以访问当前设置的值,同时访问新值,以便在发生任何事情之前进行您认为合适的任何更改。使用用户更新,您只能在设置新信息后才能访问新信息。Is there a