* [html5] create actual event for 'click' handlers and stop propagation in vue handlers and also intrinsically for 'click' event.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1bc4a462 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1bc4a462 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1bc4a462 Branch: refs/heads/0.16-dev Commit: 1bc4a4625b1d1f6beb5e072bc0792beacdaf5dca Parents: 15bfb7e Author: MrRaindrop <tekk...@gmail.com> Authored: Thu Aug 3 21:36:07 2017 +0800 Committer: MrRaindrop <tekk...@gmail.com> Committed: Thu Aug 3 21:36:07 2017 +0800 ---------------------------------------------------------------------- html5/render/vue/core/node.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1bc4a462/html5/render/vue/core/node.js ---------------------------------------------------------------------- diff --git a/html5/render/vue/core/node.js b/html5/render/vue/core/node.js index d07f3ed..235fbf9 100644 --- a/html5/render/vue/core/node.js +++ b/html5/render/vue/core/node.js @@ -17,7 +17,7 @@ * under the License. */ -import { extend, isArray } from '../utils' +import { isArray, createEvent } from '../utils' /** * remove text nodes in the nodes array. @@ -116,10 +116,7 @@ export function createEventMap (context, ...extras) { } let evt = e if (originalType && evtName !== listenTo) { - evt = extend({}, { type: listenTo }) - // weex didn't provide these two methods for event object. - delete event.preventDefault - delete event.stopPropagation + evt = createEvent(e.target, listenTo) } on && on.call(vm, evt) idx++ @@ -178,6 +175,8 @@ export function createEventMap (context, ...extras) { * we already use tap to trigger click event, so the click event should: * 1. trigger none of any vm's click listeners. * 2. prevent default behaviour for a `<a>` element. + * 3. stop propagation if triggered already. + * 4. set a _triggered flag to the event object if triggered already. * This means the click event should always be swallowed in silence. */ bindFunc('click')(function (e) { @@ -188,10 +187,10 @@ export function createEventMap (context, ...extras) { while (vm) { const ons = getListeners(vm.$vnode, 'click') const len = ons.length - if (len > 0 && vm.$el && isInANode(vm.$el)) { - e.preventDefault() + if (len > 0 && vm.$el) { + e.stopPropagation() e._triggered = { el: vm.$el } - return + return isInANode(vm.$el) && e.preventDefault() } vm = vm.$parent }