Я создаю меню, которое появляется в верхней части экрана. Когда пользователь нажимает на один из пунктов меню div, появляется много ссылок. Я не смогу скрыть этот div, нажав другой пункт меню (без проблем, уже реализованный), но также щелкнув в другом месте, затем этот элемент div и menuitems.
Я слышал о двух решениях:
- Показать невидимый div, который находится за меню, и охватывает весь экран и добавьте к нему обработчик кликов.
- Прикрепить обработчик события document.body.
Первый из них не подходит для меня, потому что этот div будет охватывать ссылки, которые находятся на странице, и я хочу, чтобы их можно было щелкнуть, даже после нажатия кнопки меню, и появился соответствующий div. Поэтому я попробовал вторую душу. Но проблема в том, что обработчик jquery click на теле запускается перед обработчиком компонента. Я понятия не имею, как заставить его сначала вызвать обработчик моих компонентов, а затем предотвратить распространение событий.
Вот код и скрипт js:
/** @jsx React.DOM */
var Menu = React.createClass({
click: function(e) {
console.log('component handled click - should be called before jquery one and prevent jquery handler from running at all');
e.stopPropagation();
},
render: function(){
console.log("component renders");
return (
<div>
<div>| MenuItem1 | MenuItem2 | MenuItem 3 |</div>
<br />
<div className="drop">
MenuItem 1 (This div appears when you click menu item)
<ul>
<li><a href="#" onClick={this.click}>Item 1 - when I click this I don't want document.body.click to fire</a></li>
<li><a href="#" onClick={this.click}>Item 1 - when I click this I don't want document.body.click to fire</a></li>
</ul>
</div>
</div>
);
}
});
React.renderComponent(<Menu />, document.getElementById("menu"));
$(document).ready(function() {
console.log('document is ready');
$("body").click(function() {
console.log('jquery handled click - should not happen before component handled click');
});
});
пусковой консоли, прежде чем запускать ее для объяснения проблемы