如何在带有Drupal表单API的日期弹出控件中使用onHourShow回调
我有一个drupal表单,只有一个日期弹出字段。我希望它只提供12、15和17小时的选项如何在带有Drupal表单API的日期弹出控件中使用onHourShow回调,drupal,Drupal,我有一个drupal表单,只有一个日期弹出字段。我希望它只提供12、15和17小时的选项 $form['order-group']['delivery'] = array( '#title' => t('I Need The Equipment Ready By'), '#type' => 'date_popup', '#date_format' => 'd-M-Y H:i'
$form['order-group']['delivery'] = array(
'#title' => t('I Need The Equipment Ready By'),
'#type' => 'date_popup',
'#date_format' => 'd-M-Y H:i',
'#timepicker' => 'timepicker',
'#timepicker_options' => array(
'rows' => 3,
'hours' => array(
'starts' => 12,
'ends' => 17,
),
'onHourShow' => 'onHourShowCallback',
'minutes' => array(
'starts' => 0,
'ends' => 0,
),
'showCloseButton' => TRUE,
'closeButtonText' => t('Close'),
),
'#default_value' => date('Y-m-d 12:00',time()),
'#date_label_position' => '',
);
然后,我将以下内容添加到我的javascript文件中(包含在drupal_add_js中,在脚本前面)
但是,我得到以下错误:
Uncaught TypeError: onHourShow.apply is not a function
at Timepicker._generateHTMLHourCell (jquery.ui.timepicker.js?psw6eo:797)
at Timepicker._generateHTML (jquery.ui.timepicker.js?psw6eo:622)
at Timepicker._updateTimepicker (jquery.ui.timepicker.js?psw6eo:467)
at Timepicker._setTimeFromField (jquery.ui.timepicker.js?psw6eo:1112)
at Timepicker._attachTimepicker (jquery.ui.timepicker.js?psw6eo:190)
at HTMLInputElement.<anonymous> (jquery.ui.timepicker.js?psw6eo:1474)
at Function.each (jquery.min.js?v=1.7.2:2)
at $.fn.init.each (jquery.min.js?v=1.7.2:2)
at $.fn.init.$.fn.timepicker (jquery.ui.timepicker.js?psw6eo:1470)
at Object.attach (date_popup_timepicker.timepicker.js?psw6eo:8)
未捕获类型错误:onHourShow.apply不是函数
在Timepicker.生成tmlhourcell(jquery.ui.Timepicker.js?psw6eo:797)
at Timepicker._generateHTML(jquery.ui.Timepicker.js?psw6eo:622)
在Timepicker.\u updateTimepicker(jquery.ui.Timepicker.js?psw6eo:467)
at Timepicker.\u setTimeFromField(jquery.ui.Timepicker.js?psw6eo:1112)
at Timepicker.\u attachTimepicker(jquery.ui.Timepicker.js?psw6eo:190)
在HTMLInputElement。(jquery.ui.timepicker.js?psw6eo:1474)
在Function.each(jquery.min.js?v=1.7.2:2)
在$fn.init.each(jquery.min.js?v=1.7.2:2)
位于$.fn.init.$.fn.timepicker(jquery.ui.timepicker.js?psw6eo:1470)
在Object.attach(date\u popup\u timepicker.timepicker.js?psw6eo:8)
我试图在Drupal堆栈交换中询问这个问题,但被“搁置”了,并被告知这是一个编程问题,所以我改在这里提问。jQuery UI Timepicker使用方法
apply()
调用回调函数,如“beforeShow”、“onSelect”等,例如:
var beforeShow = $.timepicker._get(inst, 'beforeShow');
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
因此,回调的类型必须是函数,而不是字符串
问题是模块日期弹出时间选择器在初始化时间选择器之前没有将字符串回调(从服务器传入)映射到实际的js函数回调,因此一旦jquery.ui.timepicker.js代码运行,就会抛出一个未捕获类型错误:.apply不是一个函数
在客户端,datePopup设置对象(来自Drupal.settings)可能包含字符串回调,因此在调用timepicker()方法之前,必须将这些字符串中的任何一个转换为相应的函数。到达那里缺少什么:
var timepicker_callbacks = {
beforeShow: null,
onSelect: null,
onClose: null,
onHourShow: null,
onMinuteShow: null
};
function timepicker_callbacks_assign (settings) {
for (var setting in settings) {
if (setting in timepicker_callbacks && typeof settings[setting] === 'string') {
var namespace = window,
ns_callback = settings[setting].split('.'),
func = ns_callback.pop();
for (var i = 0; i < ns_callback.length; i++) {
namespace = namespace[ns_callback[i]];
}
settings[setting] = namespace[func];
}
}
}
var timepicker\u回调={
beforeShow:null,
onSelect:null,
onClose:null,
onHourShow:null,
onMinuteShow:null
};
函数时间选择器\u回调\u分配(设置){
用于(设置中的var设置){
if(在timepicker\u回调中设置&&typeof设置[设置]==='string'){
var namespace=window,
ns_callback=settings[setting].split('.'),
func=ns_callback.pop();
对于(var i=0;i
timepicker()初始化发生在Drupal.behaviors.DatePopuTimePicker
中,我们只需要先执行timepicker\u callbacks\u assign()
,timepicker就可以获得正确的设置
我在drupal.org上创建了一个并提交了一个,它仍然“需要审查”,所以请毫不犹豫地从那里申请并审查它 jQuery UI时间选择器使用
apply()
方法调用回调函数,如“beforeShow”、“onSelect”等,例如:
var beforeShow = $.timepicker._get(inst, 'beforeShow');
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
因此,回调的类型必须是函数,而不是字符串
问题是模块日期弹出时间选择器在初始化时间选择器之前没有将字符串回调(从服务器传入)映射到实际的js函数回调,因此一旦jquery.ui.timepicker.js代码运行,就会抛出一个未捕获类型错误:.apply不是一个函数
在客户端,datePopup设置对象(来自Drupal.settings)可能包含字符串回调,因此在调用timepicker()方法之前,必须将这些字符串中的任何一个转换为相应的函数。到达那里缺少什么:
var timepicker_callbacks = {
beforeShow: null,
onSelect: null,
onClose: null,
onHourShow: null,
onMinuteShow: null
};
function timepicker_callbacks_assign (settings) {
for (var setting in settings) {
if (setting in timepicker_callbacks && typeof settings[setting] === 'string') {
var namespace = window,
ns_callback = settings[setting].split('.'),
func = ns_callback.pop();
for (var i = 0; i < ns_callback.length; i++) {
namespace = namespace[ns_callback[i]];
}
settings[setting] = namespace[func];
}
}
}
var timepicker\u回调={
beforeShow:null,
onSelect:null,
onClose:null,
onHourShow:null,
onMinuteShow:null
};
函数时间选择器\u回调\u分配(设置){
用于(设置中的var设置){
if(在timepicker\u回调中设置&&typeof设置[设置]==='string'){
var namespace=window,
ns_callback=settings[setting].split('.'),
func=ns_callback.pop();
对于(var i=0;i
timepicker()初始化发生在Drupal.behaviors.DatePopuTimePicker
中,我们只需要先执行timepicker\u callbacks\u assign()
,timepicker就可以获得正确的设置
我在drupal.org上创建了一个并提交了一个,它仍然“需要审查”,所以请毫不犹豫地从那里申请并审查它 似乎date_popup_timepicker模块中有一个bug,回调(服务器端的字符串)应该作为函数回调传递给客户端,但它只是过去了,仍然是一个字符串。(第70行date\u popup\u timepicker.module)谢谢。我认为我做的每件事都是正确的。:-)嘿,只是想让你知道我已经创建了一个补丁,我刚刚在项目页面上提交了一个补丁(你可以从下面的答案中快速查看)。它需要经过社区的测试和审查,所以不要犹豫在问题页面上留下评论。我还提出了一个关于date_datepicker_内联模块兼容性问题的补丁,请参阅。我会检查它,然后让您知道。谢谢。似乎date_popup_timepicker模块中有一个bug,回调(服务器端的字符串)应该作为函数回调传递给客户端,但它只是过去了,仍然是一个字符串。(第70行date\u popup\u timepicker.module)谢谢。我认为我做的每件事都是正确的。:-)嘿,只是想让你知道我已经创建了一个补丁,我刚刚在项目页面上提交了一个补丁(你可以从下面的答案中快速查看)。它需要经过社区的测试和审查,所以不要犹豫在问题页面上留下评论。我还提出了一个关于这个兼容性的补丁