代码之家  ›  专栏  ›  技术社区  ›  Gab Royer

除了某个区域外,是否有方法检测页面上任何地方的单击?

  •  1
  • Gab Royer  · 技术社区  · 16 年前

    这是我的问题,我正在设计一个网站,允许您通过使用onclick属性单击列表中的某个项目来选择它。我想通过单击页面上的任何其他位置来取消选择该项。我试过了 <body onClick="deselect()"> 但如果我点击页面上的任何地方,它就会取消选择我的项目(即使我第一次点击选择它!).

    那么,有没有一种方法可以检测用户是否点击了页面上的其他位置,然后在我的列表上?

    谢谢。

    编辑:我试过模糊和手淫,结果好坏参半。当我单击要选择的项时,handleclick方法会被调用两次,选择它并立即取消选择它。

    4 回复  |  直到 16 年前
        1
  •  3
  •   cgp    16 年前

    onblur不会剪切它,因为这不是一个标准的html输入元素。

    你想检查什么 this 指调用onclick事件的时间。如果它引用列表中的项目,则可以选择列表中的项目。如果它指向列表之外,则取消选择列表中的所有项。

    代码可能类似于:

    function handleClick(evt) {
       if (this.getAttribute('isListItem')) {
          // highlight
        } else {
          // remove highlighting
        }
        evt.preventDefault();
    }
    

    使用此代码取决于在html上有一个属性来标识元素是列表项。您还需要防止事件传播到任何子元素。我不确定这是否必要,但通常是因为事件会传播到包含列表项的元素。

    http://www.w3schools.com/jsref/jsref_onclick.asp

        2
  •  0
  •   Paul Whelan    16 年前

    看看onblur

        3
  •  0
  •   Dirk    16 年前

    http://www.w3schools.com/jsref/jsref_onblur.asp

    模糊是当焦点从元素“丢失”时

        4
  •  0
  •   James    16 年前

    伪代码:

    var bodyOnClick = function(){}; // empty, does nothing
    
    listItems.onclick = function(){
        /* Do stuff */
        bodyOnClick = deselect;
    };
    
    body.onclick = function() {
        bodyOnClick();
    };