当用户触摸任何不是链接/锚点等的地方时,如何执行某些操作?

时间:2012-02-18 06:52:50

标签: javascript html

我在iOS和UIWebView上使用html / javascript。 当用户触摸页面上不是链接的任何地方时,我想调用objective-c方法。

目前我有

...

<BODY ontouchend="bodyTouch();">
<HEAD>
    <script language="javascript" type="text/javascript">
        function bodyTouch() {
            invokeObjectiveC();
            }
        }
     </script> 

...
<DIV id=buttons>
<A id=navigator href="CustomScheme:SomeAction"></A>
....

我如何进行设置,以便只有当用户触摸屏幕上链接/按钮/锚点等等的任何地方时才调用bodyTouch()。

====更新===

感谢大家的回答。 不幸的是,我无法让它们中的任何一个工作(现在当我尝试其中任何一个时,我的InvokeObjectiveC()根本就没有被调用)。 我是iOS开发人员,不知道html / javascript。我会做一些学习,因为我目前不了解任何有关知识的答案,然后在我了解他们正在做的事情后尝试一下,并试图弄清楚为什么它不起作用。 我会在适当的时候将其中一个答案标记为已被接受。 干杯

4 个答案:

答案 0 :(得分:2)

document.body.addEventListener('click', function(event){
   bodyClick();
}, false);
document.querySelector('a').addEventListener('click', function(event){
    event.stopPropagation();
}, false);

在Mozilla开发人员网络上了解有关stopPropagation的更多信息

JSFiddle

答案 1 :(得分:1)

给这个人一个机会,你应该可以把它放在文件的任何地方

<script>
document.addEventListener('DOMContentLoaded', function () {
 document.documentElement.addEventListener('click', function (e) {

  /* CHECK IF THE TARGET IS IN YOUR BANLIST */
  if (['A', 'BUTTON'].indexOf(e.target.tagName) === -1) {

   /* I WOULD CALL THESE FOR GOOD MEASURE */
   e.preventDefault();
   e.stopPropagation();

   /* THIS IS YOUR FUNCTION */
   invokeObjectiveC();
  }
 }, true);
}, false);
</script>

这对输入[type = button]查看按钮无效,如果您需要,请告诉我

答案 2 :(得分:0)

使用jQuery委托和选择器, 但如果原始元素触发该事件使用stopPropagation

,请小心

答案 3 :(得分:0)

类似于罗德里克的回应,但更多的是跨浏览器友好

document.getElementsByTagName('html')[0].addEventListener('click', function (ev) {
    var el, elN;
    ev = ev || window.event;
    el = ev.target || ev.srcElement;
    elN = el.nodeName.toLowerCase();
    if (elN == 'a' || elN == 'input') return false;
    invokeObjectiveC();
}, true);