我已经在重力表单的条目详细信息编辑管理页面中的日期字段上添加了对日期选择器的支持。我只是让gform_datepicker_init
在中编写脚本admin_enqueue_scripts
钩这可以很好地工作,因为在条目详细信息编辑页面中默认情况下不可用的日期字段会显示日期选择器。
我的表单有其他要求,我想限制datepicker字段中的日期。因此,我想利用JS过滤器gform_datepicker_options_pre_init
由重力模板提供。当我尝试使用以下代码时,它被放入一个钩子函数中admin_enqueue_scripts
, 这个fieldId
是undefined
正如控制台日志所报告的,因此这不起作用:
// 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,如果我需要将此代码放到其他挂钩中才能工作,请提出建议。
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 以当前重力形式。希望它能在调试问题时帮助他人。