You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
/** |
|
* Copyright 2013-2015, Facebook, Inc. |
|
* All rights reserved. |
|
* |
|
* This source code is licensed under the BSD-style license found in the |
|
* LICENSE file in the root directory of this source tree. An additional grant |
|
* of patent rights can be found in the PATENTS file in the same directory. |
|
* |
|
* @providesModule MobileSafariClickEventPlugin |
|
* @typechecks static-only |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var EventConstants = require("./EventConstants"); |
|
|
|
var emptyFunction = require("./emptyFunction"); |
|
|
|
var topLevelTypes = EventConstants.topLevelTypes; |
|
|
|
/** |
|
* Mobile Safari does not fire properly bubble click events on non-interactive |
|
* elements, which means delegated click listeners do not fire. The workaround |
|
* for this bug involves attaching an empty click listener on the target node. |
|
* |
|
* This particular plugin works around the bug by attaching an empty click |
|
* listener on `touchstart` (which does fire on every element). |
|
*/ |
|
var MobileSafariClickEventPlugin = { |
|
|
|
eventTypes: null, |
|
|
|
/** |
|
* @param {string} topLevelType Record from `EventConstants`. |
|
* @param {DOMEventTarget} topLevelTarget The listening component root node. |
|
* @param {string} topLevelTargetID ID of `topLevelTarget`. |
|
* @param {object} nativeEvent Native browser event. |
|
* @return {*} An accumulation of synthetic events. |
|
* @see {EventPluginHub.extractEvents} |
|
*/ |
|
extractEvents: function( |
|
topLevelType, |
|
topLevelTarget, |
|
topLevelTargetID, |
|
nativeEvent) { |
|
if (topLevelType === topLevelTypes.topTouchStart) { |
|
var target = nativeEvent.target; |
|
if (target && !target.onclick) { |
|
target.onclick = emptyFunction; |
|
} |
|
} |
|
} |
|
|
|
}; |
|
|
|
module.exports = MobileSafariClickEventPlugin;
|
|
|