Javascript Modernizer测试失败后仍应用该功能
我正在用Modernizer运行一个触摸事件测试,测试似乎运行得很好,但仍然是一个只有在测试成功时才会调用的函数 这就是测试:Javascript Modernizer测试失败后仍应用该功能,javascript,touch,modernizr,Javascript,Touch,Modernizr,我正在用Modernizer运行一个触摸事件测试,测试似乎运行得很好,但仍然是一个只有在测试成功时才会调用的函数 这就是测试: Cluster.prototype.test_touch_event_support = function(callback) { return (Modernizr.touch) ? callback : log("Touch Support Undetected"); }; self.test_touch_event_support(self.initia
Cluster.prototype.test_touch_event_support = function(callback) {
return (Modernizr.touch) ? callback : log("Touch Support Undetected");
};
self.test_touch_event_support(self.initiate_shop_touch_events());
这是仅在测试成功时才应运行的函数:
Cluster.prototype.initiate_shop_touch_events = function() {
var self = this;
return $("#" + this.shop_wrapper_id).hammer({prevent_default: true, drag_min_distance: Math.round(this.viewport_width * 0.1)}).bind("drag", function(ev) {
var data = JSON.parse(self.get_local_storage_data(self.shop_data_key));
var step = (ev.direction == "left") ? 1 : -1;
var new_page = parseInt(data.current_page + step);
return (new_page > 0 && new_page <= data.total_pages) ? $(self.shop_navigation_class).jPages(new_page) : false;
});
};
有人能告诉我为什么这个功能还在运行吗?因为我在控制台中也得到了触摸事件不受支持的消息
self.test_touch_event_support(self.initiate_shop_touch_events());
将调用self.initiate\u shop\u touch\u事件的结果传递给self.test\u touch\u事件支持
您需要执行以下操作:
self.test_touch_event_support(self.initiate_shop_touch_events);
传递函数
在
您需要调用回调函数,而不是引用它
Cluster.prototype.test_touch_event_support = function(callback) {
return (Modernizr.touch) ? callback.call (this) : log("Touch Support Undetected");
};
要吸取的教训:
this
引用。这通常是通过在函数名前面加上对象引用来指定的,例如obj.func(123)
在这个调用中,每次函数体引用This
时都会使用对象obj
。使用此用法时,函数必须是对象的已定义方法。函数的call
和apply
方法可用于显式指定此上下文参数:func.call(obj,123)
在func
不是obj
的方法时与上述方法等效更多细节可以在这里找到即使参数是函数?@Roland yes,因为你需要的是函数的引用,而不是函数的结果。我知道了,我刚刚测试过,好像我启用了触摸事件,函数不会运行:)可能是因为参数是引用而不是函数?我已经尝试过了,但没有成功。您可以在这里查看:。用鼠标拖动,它应该根据您提供的解决方案工作(只需取消测试,这样您就可以使用鼠标拖动而不是触摸拖动)。因为您正在丢失上下文(此变量的值),请参阅上面的更多编辑。
Cluster.prototype.test_touch_event_support = function(callback) {
return (Modernizr.touch) ? callback.call (this) : log("Touch Support Undetected");
};