Click eventlistener запускается при нажатии на другие элементы внутри этого div [duplicate]

Как упоминалось выше упомянутый плакат, X является сервером (что означает программу, к которой другие программы обращаются и вызывается), она отвечает за создание графической среды, и если она по какой-либо причине не сработает, вас встретит интерфейс командной строки.

Термин сервер также может применяться к PulseAudio, который является звуковым сервером; снова он вызывает приложения и призван производить звук.

248
задан 20 January 2016 в 19:12

10 ответов

В соответствии с этой страницей в IE вам нужно:

event.cancelBubble = true

5
ответ дан 15 August 2018 в 14:32
[F1]
0
ответ дан 15 August 2018 в 14:32

Имейте в виду, что window.event не поддерживается в FireFox, поэтому он должен быть чем-то вроде:

e.cancelBubble = true

Или вы можете использовать стандарт W3C для FireFox:

e.stopPropagation();

Если вы хотите получить фантазию, вы можете сделать это:

function myEventHandler(e)
{
    if (!e)
      e = window.event;

    //IE9 & Other Browsers
    if (e.stopPropagation) {
      e.stopPropagation();
    }
    //IE8 and Lower
    else {
      e.cancelBubble = true;
    }
}
76
ответ дан 15 August 2018 в 14:32
  • 1
    Чтобы заставить его работать, нужно называть это следующим образом: <div onclick="myEventHandler(event);"> – DarkDust 22 December 2010 в 18:35
  • 2
    Это может быть «событие || window.event & Quot ;. – Pointy 23 June 2011 в 02:49
  • 3
    если (e.cancelBubble) не выглядит правильно для меня, вы устанавливаете его в true, если оно уже верно – Guillaume86 6 October 2011 в 17:33
  • 4
    e.cancelBubble возвращает false в IE! Он не может достичь инструкции e.cancelBubble = true;. Вместо этого используйте условие SoftwareARM !! – mauretto 30 March 2012 в 14:38

Почему бы просто не проверить, какой элемент был нажат? Если вы нажмете на что-нибудь, window.event.target присваивается элементу, который был нажат, а щелкнутый элемент также может быть передан в качестве аргумента.

и

function myfunc(el){
  if (window.event.target === el){
      // perform action
  }
}
<div onclick="myfunc(this)" />
1
ответ дан 15 August 2018 в 14:32
  • 1
    Спасибо, это кажется самым чистым решением здесь. На стороне примечания, которую вы должны учитывать, что это только соответствует, когда элемент щелкнул, является фактическим самым верхним элементом. – Simon Mattes 26 April 2017 в 00:14

Для веб-страниц ASP.NET (не MVC) вы можете использовать объект Sys.UI.DomEvent в качестве оболочки собственного события.

<div onclick="event.stopPropagation();" ...

или передать событие как параметр для внутренней функции:

<div onclick="someFunction(event);" ...

и в некоторой функции:

function someFunction(event){
    event.stopPropagation(); // here Sys.UI.DomEvent.stopPropagation() method is used
    // other onclick logic
}
7
ответ дан 15 August 2018 в 14:32

Есть два способа получить объект события изнутри функции:

Первый аргумент в браузере, совместимом с W3C (Chrome, Firefox, Safari, IE9 +) Объект window.event в Интернете Explorer (& lt; = 8)

Если вам необходимо поддерживать устаревшие браузеры, которые не следуют рекомендациям W3C, как правило, внутри функции вы должны использовать что-то вроде следующего:

function(e) {
  var event = e || window.event;
  [...];
}

, который будет проверять первый, а затем другой и сохранить в зависимости от того, что было найдено внутри переменной события. Однако в обработчике событий inline не используется объект e. В этом случае вы должны использовать коллекцию arguments, которая всегда доступна, и ссылается на полный набор аргументов, переданных функции:

onclick="var event = arguments[0] || window.event; [...]"

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

192
ответ дан 15 August 2018 в 14:32
  • 1
    Из встроенного прослушивателя вы можете передать объект события, например: onclick="foo(event)", затем в функцию function foo(event){/* do stuff with event */}. Это работает как в моделях событий IE, так и в W3C. – RobG 26 December 2014 в 03:30
  • 2
    Это "меньше или равно восьми" есть несколько ... неоднозначный. – TechNyquist 1 December 2016 в 12:39
  • 3
    это фактически не отвечает на вопрос. – jcomeau_ictx 19 June 2017 в 09:08

Это сработало для меня

<script>
function cancelBubble(e) {
 var evt = e ? e:window.event;
 if (evt.stopPropagation)    evt.stopPropagation();
 if (evt.cancelBubble!=null) evt.cancelBubble = true;
}
</script>

<div onclick="alert("Click!")">
  <div onclick="cancelBubble(event)">Something inside the other div</div>
</div>
9
ответ дан 15 August 2018 в 14:32

У меня была такая же проблема: js error box в IE - это прекрасно работает во всех браузерах, насколько я могу видеть (event.cancelBubble = true выполняет задание в IE)

onClick="if(event.stopPropagation){event.stopPropagation();}event.cancelBubble=true;"
17
ответ дан 15 August 2018 в 14:32

Это также работает. В ссылке HTML используйте onclick с возвратом так:

<a href="mypage.html" onclick="return confirmClick();">Delete</a>

И тогда функция comfirmClick () должна выглядеть как:

function confirmClick() {
    if(confirm("Do you really want to delete this task?")) {
        return true;
    } else {
        return false;
    }
};
1
ответ дан 15 August 2018 в 14:32
  • 1
    Это не то, что имел в виду. – jbird 26 September 2013 в 21:53
  • 2
    @jbird Это именно то, что имел в виду. Это другой (более старый) способ отменить событие из пузырьков дерева домиков (он находится в спецификациях уровня api уровня 1). – gion_13 2 October 2013 в 16:29
  • 3
    @ gion_13 Но действие click не является чем-то, что пользователь должен подтвердить. В этом вопросе мы хотим, чтобы у него был включен onclick (), а не onclick () родителя. Ввод пользовательского приглашения между ними не помогает. Надеюсь, вы увидите эту разницу. – jbird 3 October 2013 в 17:13
  • 4
    [F1] не имеет значения. Я имею в виду возвращаемое значение . quote: В ссылке HTML используйте onclick с возвратом, как это – gion_13 3 October 2013 в 19:51
  • 5
    возвращая ложные отмены после ссылки, это не отменяет распространение на моем хроме – commonpike 4 January 2016 в 02:03

Используйте эту функцию, она проверит наличие правильного метода.

function disabledEventPropagation(event)
{
   if (event.stopPropagation){
       event.stopPropagation();
   }
   else if(window.event){
      window.event.cancelBubble=true;
   }
}
44
ответ дан 15 August 2018 в 14:32

Другие вопросы по тегам:

Похожие вопросы: