如何恢复事件的浏览器默认行为? (JavaScript的)

时间:2013-01-10 16:17:03

标签: javascript javascript-events

我有一个网页(使用HTML5 / javascript),使用div来定义布局。

由于我有一些我希望能够拖动并且不希望在此过程中选择文本的元素,因此我使用以下方法禁用了最外层容器div的selectstart和onmousedown事件:

document.getElementById("mapContainer").onselectstart = function(){return false;};
document.getElementById("mapContainer").onmousedown = function(){return false;};

但是,我在布局中还有一个文本框,我需要能够选择和写入以进行搜索。我发现了很多关于如何禁用事件的浏览器默认行为的主题,但没有具体关于如何恢复默认行为。我可以,如果需要,但我想避免重复写入脚本。因此,我想知道是否有一个“restoreDefault”类型的函数/设置,我只能应用于文本框。

感谢。

2 个答案:

答案 0 :(得分:0)

使用addEventLsitenerremoveEventListener更好地访问您的事件监听器:

function fooBar(){
    return false;
}

document.getElementById('mapContainer').addEventListener('selectstart', fooBar);    // Start listening
document.getElementById('mapContainer').removeEventListener('selectstart', fooBar); // Stop lsitening

您还可以删除您当前拥有的事件监听器:

document.getElementById('mapContainer').onmousemove = null;

答案 1 :(得分:0)

您可以在禁用之前检查它是否在textarea中启动:

<强> HTML

<div id="mapContainer">
  <h2>What what?</h2>
  <textarea id="ta">FOO BAR WORLD</textarea>
</div>

<强>的JavaScript

function testForElement(e) {
      e = e || window.event;
      var elem = e.srcElement || e.target;
      return elem && elem.id==="ta";
}

var myDiv = document.getElementById("mapContainer");
myDiv.onselectstart = testForElement;
myDiv.onmousedown = testForElement;

示例

JSFiddle