У меня возникли проблемы с получением stopPropagation для работы в моем dataview. В основном проблема заключается в следующем:stopPropagation в Chrome и IE
- Выберите узел в DataView, это увольняет выберите, SelectionChange события
- Выбранный узел имеет изображение с событием OnClick, это создает отчет в всплывающем окне.
- Когда изображение кликается, я вызываю stopPropagation, чтобы предотвратить событие, пузырящееся до dataview, что вызовет снятие выделения, события changechange, которые будут запущены.
- stopPropagation только работает в Firefox для меня. Chrome и IE, похоже, не имеют никакого эффекта, поскольку узел отменяется, а нежелательные события запускаются.
Я пробовал следующую функцию на событие OnClick
handleBubbleEvent: function(e) {
if (!e) {
var e = window.event;
}
e.cancelBubble = true;
e.returnValue = false;
if (e.stopPropagation) {
e.stopPropagation();
}
}
также видели stopImmediatePropagation, preventDefault, stopEvent, но они также не имели никакого эффекта
Я делаю все это внутри Ext XTemplate
<a href="#" title="Report" class="quicklinks journey_report" onClick="handleBubbleEvent(event); Ext.getCmp(...).generateReport(...); return false;"></a>
Я интересно, если это ExtJS 5 вопрос и тот же код работает старый er версии ExtJS. Я просто не могу остановить событие щелчка, переходящее в dataview, которое затем запускает события отмены выбора и выбора.
Может быть, это вопрос времени/порядка. Я использую событие выбора ExtJS в представлении данных, тогда как в XTemplate я использую собственную функцию слушателя? Я вижу материал в Интернете, ссылающийся на захват/пузырь событий, и поскольку я не веб-разработчик, я борюсь за это.
ОБНОВЛЕНИЕ: Теперь я просматриваю события и захватываю/пузыря, кажется, что захват идет к родительскому объекту и вызывает отмену выбора, затем меняет направление на фактический обработчик кликов, после чего я вызываю stopPropagation но на данном этапе уже слишком поздно. Глядя на создание моего собственного прослушивателя для выбора change с набором target/delegate, так что он вызывается только тогда, когда class! = 'Some class', а затем слушатель на «some class», чтобы обрабатывать то, что я хочу, и stopPropagation, если это делает любой смысл!
Сам обработчик событий должен, вероятно, также вернуть false. – Dave
Я должен был добавить, что код onClick находится внутри Ext.XTemplate, поэтому он выглядит примерно так: OnClick = handleBubbleEvent (событие); Ext.getCmp (...) generateReport (...). return false; – user2751034