我在这里为触摸设备的 JavaScript 点击事件获取了一些代码:GitHub 页面。感谢 Jørn Kinderås提供此代码。
我的问题是,如果我这样做: $('.support input').tap(function () { $(this).click(); });
它不起作用,因为this
它指的是DOMWindow
(正如我通过执行console.log(this)
.
我现在找到的解决方法是在点击事件代码中更改几行。我更改了以下内容:
elem.on('touchend', _bind(function (e) {
endTime = new Date().getTime();
if (!didMove && ((endTime - startTime) < tapCancelTime)) {
callback(e);
}
}, this));
对此:
elem.on('touchend', _bind(function (e) {
endTime = new Date().getTime();
if (!didMove && ((endTime - startTime) < tapCancelTime)) {
elem.onTap = callback;
elem.onTap(e);
}
}, this));
我觉得可能有更好的方法来做到这一点,整体elem.onTap = callback;
感觉很脏。
以下是来自 GitHub 的源代码:
(function ($) {
"use strict"
$.fn.tap = function (callback) {
var version, didMove, tapCancelTime, startTime, endTime, _bind;
version = "1.0.1";
tapCancelTime = 2 * 1000;
_bind = function (fn, me) { return function () { return fn.apply(me, arguments); }; };
return this.each(
function (index, element) {
var elem = $(element);
elem.on('click', function (e) {
e.preventDefault();
});
elem.on('touchstart', _bind(function (e) {
didMove = false;
startTime = new Date().getTime();
}, this));
elem.on('touchmove', _bind(function (e) {
didMove = true;
}, this));
elem.on('touchend', _bind(function (e) {
endTime = new Date().getTime();
if (!didMove && ((endTime - startTime) < tapCancelTime)) {
callback(e);
}
}, this));
elem.on('touchcancel', _bind(function (e) {
callback(e);
}, this));
}
);
};
})(jQuery);