2009-12-11 3 views
3

Что такое кросс-браузерный метод? Мне нужно предотвратить любое действие по умолчанию для изображения, чтобы ни перетаскивание, ни что-либо еще не срабатывали по умолчанию.Как предотвратить действия по умолчанию в JavaScript?

+0

Просьба уточнить свой вопрос – Pierreten

+0

Все понятно. Внимательно прочитайте. –

+4

Ale Anderson, если люди просят вас уточнить свой вопрос, вы можете подумать, что то, что кажется вам понятным, не обязательно ясно для других. Ваш вопрос крайне неясен. – eyelidlessness

ответ

1

Вы можете только отменить определенные события. Вы не можете «глобально отменить» действия по умолчанию.

Чтобы отменить dragging изображение (которое является только функцией по умолчанию в некоторых браузерах), верните false в событие mousedown.

+2

Вы можете глобально отменить множество действий по умолчанию, но не все из них. В этом случае (простить ужасный код) 'document.onmousedown = function (e) {if (typeof e == 'undefined') e = window.event; if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); e.returnValue = false; return false; }; 'Но, очевидно, у этого будет множество неприятных побочных эффектов. – eyelidlessness

+0

Это правда, что будет иметь неприятные побочные эффекты, но, безусловно, более глобальная концепция. –

+0

Чтобы добавить: это работает практически на любом событии, которое пузырится. Был достигнут определенный прогресс в деле «делегирования событий» (очевидно, это совпадающая концепция, а не точно 1: 1) с событиями, не связанными с пузырьками, но я действительно не знаю, как они реализованы. Я знаю, что недавняя альфа-версия jQuery начала реализовывать их, поэтому, возможно, стоит посмотреть. – eyelidlessness

5

Вы можете зарегистрировать события, которые хотите отменить, а затем либо return false, либо использовать Event.preventDefault(), в зависимости от браузера и события.

+0

это не работает кросс-браузер. Но плакат не указал, какие браузеры нацелены в любом случае. – squiddle

4
(function() { 
    var onmousedown; 
    if('onmousedown' in document && typeof document.onmousedown == 'function') { 
     onmousedown = document.onmousedown; 
    } 
    document.onmousedown = function(e) { 
     if(typeof e == 'undefined') { 
      e = window.event; 
     } 
     if(!e.target) { 
      e.target = e.srcElement || document; 
     } 
     if('nodeName' in e.target && e.target.nodeName.toLowerCase() == 'img') { 
      if(e.preventDefault) { 
       e.preventDefault(); 
      } 

      // If you want to register mousedown events for 
      // elements containing images, you will want to 
      // remove the next four lines. 
      if(e.stopPropagation) { 
       e.stopPropagation(); 
      } 
      e.cancelBubble = true; 

      e.returnValue = false; 
      return false; 
     } 

     if(onmousedown !== undefined) { 
      onmousedown(e); 
     } 
    }; 
})(); 

Возможно, вам потребуется что-то подобное другим событиям, которые вы хотели бы предотвратить, если это не делает то, что вы хотите.

Также стоит отметить, что если вы пытаетесь запретить пользователям загружать изображения со страницы на свой компьютер, вам это не удастся. Если браузер может загрузить изображение, так же может быть и пользователь. Использование JavaScript для блокировки (некоторых) попыток легко обойти, просто отключив JavaScript.

Смежные вопросы